加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

初探swift语言的学习笔记四(类对象,函数)

发布时间:2020-12-14 01:50:31 所属栏目:百科 来源:网络整理
导读:作者:fengsh998 原文地址: http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号 fengsh998 来支持我,谢谢! swift扩展了很多功能和属性,有些也比较奇P。只有慢慢学习,通
作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/29606137
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!


swift扩展了很多功能和属性,有些也比较奇P。只有慢慢学习,通过经验慢慢总结了。

下面将初步学习一下类的写法。

码工,最大爱好就是看码,而不是文字,太枯燥。

[cpp] view plain copy
  1. //
  2. //computer.swift
  3. //swiftDemo
  4. //
  5. //Createdbyappleon14-6-8.
  6. //Copyright(c)2014年fengsh.Allrightsreserved.
  7. /*
  8. 写本例子的目的在于快速学习swift类的写法,包括知识点:
  9. 1.属性设置
  10. 2.构造、释构
  11. 3.接口实现多态
  12. 4.函数的重载(重载很特别不需要overload关键词Delphi的朋友注意了)和重写(override)
  13. 5.类函数(静态成员函数)
  14. 6.各种函数的声明,带参,默认值,多个返回,多个输出参数,多个未确定参数的函数,内连函数等
  15. 7.函数类型变量,函数地址作为传参,返回函数地址(还未完工,学习中)
  16. 8.单例
  17. 9.swift新功能willset,didset@lazy属性
  18. 10.(后续学习补充)
  19. */
  20. importFoundation
  21. varinstance:Computer?
  22. letunk="unKnow"
  23. //显示器屏幕宽高
  24. structMonitorWH{
  25. varwidth=0
  26. varheight=0
  27. varresolution=0.0//分辩率
  28. }
  29. //协义,接口,实现多重继承
  30. protocolProtocolComputer{
  31. varprice:Double{get}//只有get方法
  32. funcrunComputer()
  33. }
  34. //计算机类型
  35. enumComputerType:Int
  36. {
  37. casenone
  38. casebook//笔记本
  39. casesuperBook//超级笔记本
  40. casehome//家庭电脑
  41. funccallbackWhenStarting()//computer:Computer
  42. {
  43. //计算机类
  44. classComputer:NSObject,ProtocolComputer
  45. varcpu=unk//cpu
  46. varmemory=unk//内存
  47. varhardDisk=unk//硬盘
  48. varmonitor=unk//显示器
  49. varcpName=unk//品牌
  50. varcomputertype:ComputerType=.none
  51. //@lazy//这关键词声明的有啥作用啊????
  52. //继承接口的属性
  53. varprice:Double=0.0
  54. //willsetdidset属性
  55. vartotalPrice:Int=0{
  56. willSet(newTotalPrice){//参数使用new+变量名且变量名首地址大写
  57. println("准备将totalPrice值(原值为:(totalPrice))设为:(newTotalPrice)")
  58. //todosomthingbeforeset.
  59. didSet{
  60. iftotalPrice>oldValue{
  61. println("设置后新值比旧值增加了(totalPrice-oldValue)")
  62. //声明一个set,get属性
  63. varcomputerPrice:Double{
  64. get{
  65. println("youcallcomputerPrice.")
  66. returnprice
  67. set{
  68. price=newValue
  69. println("yousetcomputerPricevalueis(price)")
  70. //默认构造
  71. init()
  72. println("defaultcreatrustoriscalled.")
  73. //默认构造不能和init()共存
  74. //convenienceinit(){
  75. //self.init(computerName:"unknow",price:0)
  76. //}
  77. //自定义构造函数
  78. init(computerName:String,price:Double)
  79. println("customcreatrustoriscalled.")
  80. self.cpName=computerName
  81. self.price=price
  82. //释构
  83. deinit{
  84. println("thisisdestory?")
  85. funcdescription()->String
  86. //还真不知道怎么换行来写代码以前可以使用现在被作参用了
  87. return"Computerdescription:product(self.cpName),typeis(self.computertype.toRaw()),cpuis(self.cpu),memoryis(self.memory),diskis(self.hardDisk),monitoris(self.monitor),priceis(self.price)"
  88. //类函数(OC中的+号操作,c/c++中的static函数)
  89. classfuncshareInstance()->Computer
  90. returnComputer()
  91. //开机关机(不带返回值函数)
  92. funcoperationComputer(onOrOff:Bool)
  93. ifonOrOff
  94. println("computerisstarting")
  95. else
  96. println("computerisstopping")
  97. //无参,无返回值函数
  98. funccomputerRunning()
  99. println("computerisrunning")
  100. //多个返回值(即输出参数)
  101. funcgetComputerConfig()->(cpu:String,hd:String,mem:String,mon:String)
  102. return(self.cpu,self.hardDisk,self.memory,self.monitor)
  103. //使用inout参数来作为输出参数
  104. funcgetComputerConfig(inoutcpu:String,inouthd:String,inoutmem:String,inoutmon:String)
  105. cpu=self.cpu
  106. hd=self.hardDisk
  107. mem=self.memory
  108. mon=self.monitor
  109. //外部参数名函数(目的是让调用者更加清楚每个参数的具体函义)
  110. //computerCPU,withComputerhardDisk,withComputerMemory,withComputerMonitor这些都是外部参数名
  111. //在调用时必须带上
  112. funcsetComputerConfig(computerCPUcpu:String,withComputerhardDiskhd:String,
  113. withComputerMemorymem:String,withComputerMonitormon:String)
  114. self.cpu=cpu
  115. self.hardDisk=hd
  116. self.memory=mem
  117. self.monitor=mon
  118. //使用#来把变量名提升了具有外部参数名作用的变量名,这样就不用再写一次外部参数名(在外部参数名与变量名相同时使用)
  119. funcsetComputerConfig(#cpu:String,disk:String,mon:String)
  120. self.cpu=cpu
  121. self.hardDisk=disk
  122. self.memory=mem
  123. self.monitor=mon
  124. //参数的默认值
  125. funcmacBookPro(pname:String="Apple",cpu:String="IntelCoreI5",type:ComputerType,
  126. mem:String="2G",mon:String="IntelHDGraphics4000")
  127. self.cpName=pname
  128. self.computertype=type
  129. //可变参数
  130. funcusbNumbers(usbs:String...)->String
  131. varret:String=""
  132. forusbinusbs
  133. println(usb)
  134. ret+=(usb+",")
  135. returnret
  136. //常量参数、变量参数
  137. //尽管函数内部修改了version但并不影响原来外部设定的值
  138. funclookWindowsVersion(varversion:String)->String
  139. version="defaultwindows"+version
  140. returnversion
  141. //mutatingfunc
  142. funcgetResolution(pname:String)->MonitorWH
  143. varmt=MonitorWH(width:1364,height:1280,resolution:16/9)
  144. ifpname=="Phripse"
  145. mt=MonitorWH(width:5555,height:3333,resolution:29/10)
  146. returnmt
  147. //函数作为参数传参
  148. //varcallbackWhenStarting:()->()=callbackWhenStarting
  149. //函数作为返回值
  150. //函数作为变量定义
  151. //嵌套函数
  152. funcopenTask()
  153. funcopenOtherTask()
  154. println("openothertask")
  155. println("opentask")
  156. //函数重写
  157. funclookComputerBasicHardInfo(computer:Computer)
  158. //接口实现
  159. funcrunComputer()
  160. println("Computerrun.")
  161. classLenove:Computer
  162. overridefunclookComputerBasicHardInfo(computer:Computer)
  163. ifcomputerisLenove//isas操作。
  164. println("这是联想")
  165. }

调用DEMO:

    //varcpt=Computer()//调用默认构造
  1. varcpt=Computer(computerName:"Apple",price:12000)//调用自定义构造
  2. println(cpt.description)
  3. println(cpt.getComputerConfig())
  4. //属性测试
  5. println("价钱为:(cpt.computerPrice)")
  6. cpt.computerPrice=2000.0;
  7. println("设置后的价钱为:(cpt.computerPrice)")
  8. //测试willsetdidset
  9. cpt.totalPrice=100;
  10. cpt.totalPrice=400;
  11. cpt.totalPrice=900;
  12. vara="",b="",c="",d=""
  13. cpt.getComputerConfig(&a,hd:&b,mem:&c,mon:&d)
  14. println("a=(a),b=(b),c=(c),d=(d)")
  15. cpt.setComputerConfig(computerCPU:"interi5",withComputerhardDisk:"WD500",
  16. withComputerMemory:"4G",withComputerMonitor:"Phripse")
  17. println("最新配置:(cpt.description)")
  18. cpt.setComputerConfig(cpu:"AMD",disk:"HD1T",mem:"8G",mon:"SamSung")
  19. println("最新配置:(cpt.description)")
  20. //使用缺省值调用函数
  21. cpt.macBookPro(type:ComputerType.book,disk:"5")
  22. println("平果配置:(cpt.description)")
  23. letusbSupportType=cpt.usbNumbers("2.0","3.0")
  24. println("支持USB接口:(usbSupportType))")
  25. letextentUsbType=cpt.usbNumbers("5.0")
  26. println("扩展USB接口:(extentUsbType)")
  27. varversion="xp3";
  28. letnewversion=cpt.lookWindowsVersion(version);
  29. println(version)
  30. println(newversion)

输出:

    customcreatrustoriscalled.
  1. Computerdescription:productApple,typeis0,cpuisunKnow,memoryisunKnow,diskisunKnow,monitorisunKnow,priceis12000.0
  2. (unKnow,unKnow,unKnow)
  3. youcallcomputerPrice.
  4. 价钱为:12000.0
  5. yousetcomputerPricevalueis2000.0
  6. youcallcomputerPrice.
  7. 设置后的价钱为:2000.0
  8. 准备将totalPrice值(原值为:0)设为:100
  9. 设置后新值比旧值增加了100
  10. 准备将totalPrice值(原值为:100)设为:400
  11. 设置后新值比旧值增加了300
  12. 准备将totalPrice值(原值为:400)设为:900
  13. 设置后新值比旧值增加了500
  14. a=unKnow,b=unKnow,c=unKnow,d=unKnow
  15. 最新配置:Computerdescription:productApple,cpuisinteri5,memoryis4G,diskisWD500,monitorisPhripse,priceis2000.0
  16. 最新配置:Computerdescription:productApple,cpuisAMD,memoryis8G,diskisHD1T,monitorisSamSung,priceis2000.0
  17. 平果配置:Computerdescription:productApple,typeis1,cpuisIntelCoreI5,memoryis2G,diskis5,monitorisIntelHDGraphics4000,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> 2.0
  18. 3.0
  19. 支持USB接口:2.0,3.0,)
  20. 5.0
  21. 扩展USB接口:5.0,
  22. xp3
  23. defaultwindowsxp3
  24. thisisdestory?

样子最好自己写一个从过种中去学习。光看,也许还不清楚是什么。

谢谢大家,因为是英文文档,看得我头也比较痛,有些要猜和运行来理解,还有些没有完善有点乱。有些没有搞懂所以就没有整理好。

大家共同学习,共同进步。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读