swift学习笔记之继承

前端之家收集整理的这篇文章主要介绍了swift学习笔记之继承前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. //继承1防止代码冗余2扩展功能
  2. //1继承的定义
  3. //2继承属性
  4. //3子类不仅可以继承父类属性,还可以继承在属性中的添加属性监视器
  5. class StepCounter {
  6. var totalSteps:Int=0 { //千万前面不能加lazy
  7. willSet(newTotalSteps) {
  8. print("新的值:\(newTotalSteps)")
  9. }
  10.  
  11. didSet(old) {
  12. if (totalSteps > old) {
  13. print("与原来比增减了\(totalSteps - old)个值")
  14. }
  15.  
  16. }
  17.  
  18. }
  19. }
  20.  
  21. class stepCounter:StepCounter {
  22.  
  23. }
  24.  
  25. let counter=stepCounter()
  26. counter.totalSteps=10
  27. counter.totalSteps=100
  28.  
  29. //4下标脚本的继承
  30. class Sorce {
  31. var english:Int=130
  32. var chinese:Int=50
  33. var math:Int=90
  34.  
  35. subscript(index:Int)->Int {
  36. get {
  37.  
  38. switch index {
  39. case 0:
  40. return english
  41. case 1:
  42. return chinese
  43. case 2:
  44. return math
  45. default:
  46. return 0
  47. }
  48.  
  49. }
  50.  
  51. }
  52. }
  53.  
  54. class childSorce: Sorce{
  55.  
  56. }
  57. let myscore=childSorce()
  58. print(myscore[0])
  59. print(myscore[1])
  60.  
  61. //5方法的继承
  62.  
  63. //6继承的特点 在swift 中1>只支持单继承,但一个父类可以多个子类,成树型结构2>不可以删除父类属性
  64.  
  65.  
  66. //7重写
  67. //
  68.  
  69. class NewClass {
  70.  
  71. var value:Int {// ~~1计算属性
  72.  
  73. return 100
  74. }
  75. class var classValue:Int { //~~~2重写类型属性
  76.  
  77. return 200
  78. }
  79.  
  80.  
  81. }
  82.  
  83. class NewClass1: NewClass {
  84. override var value:Int {
  85. return 333
  86. }
  87.  
  88. override class var classValue:Int {
  89. return 666
  90. }
  91. }
  92. let cls = NewClass1()
  93. print(cls.value)
  94. print(NewClass1.classValue)
  95.  
  96.  
  97. // ~~~~3添加属性监视器
  98.  
  99.  
  100. class Car {
  101. var speed:Double=0.00
  102. }
  103.  
  104. class AutomicCar: Car {
  105. var gear = 1
  106. override var speed:Double {
  107. didSet {
  108. gear = Int(speed)
  109. print(gear)
  110. }
  111. }
  112. }
  113.  
  114. let automic = AutomicCar()
  115. automic.speed=34.00
  116. automic.speed=6886.00
  117.  
  118. // ~~~~~4重写下标脚本
  119. class childSorce111: Sorce{
  120. var value=0
  121. override subscript(index:Int)->Int {
  122. let count = index-value
  123. return count
  124. }
  125. }
  126. //~~~~~5重写方法
  127.  
  128. //重写的注意事项
  129. //@1不可以省略override
  130. //@方法相同才能重写,父类没有的,怎么重写
  131.  
  132.  
  133. //8访问父类的成员
  134. // 1>访问属性 super.属性
  135. // 2>访问下标脚本 suer[index]
  136. // 3>访问方法 super.方法名(参数名)
  137. // 4>访问类型属性
  138.  
  139.  
  140.  
  141. //9防止重写
  142. // 将所有的属性,下标脚本,方法,类型属性 前面加一个 final (最终) 就可以达到防止子类重写了
  143.  
  144.  
  145. //10类型检查
  146. //类型检查是一种检查类实例的方式
  147. // 1> 类型检查 is
  148. // 用法 实例 is 子类型
  149. // @1,不能总是true
  150. // @2 实例是特定的子类型
  151.  
  152. class ClassA {
  153.  
  154. }
  155.  
  156. class ClassA1:ClassA {
  157. var movie:String="hello"
  158. }
  159.  
  160. class ClassA2:ClassA {
  161. var movie:String="hello"
  162. }
  163. class ClassA3:ClassA {
  164. var movie:String="hello"
  165. }
  166. class ClassA4:ClassA {
  167. var movie:String="hello"
  168. }
  169.  
  170. class ClassB:ClassA {
  171. var movie:String="hello"
  172. }
  173. class ClassC {
  174.  
  175. }
  176.  
  177.  
  178. let b = ClassB()
  179. if b is ClassB { //总是truse
  180. print("true")
  181. }
  182. else {
  183. print("false")
  184. }
  185.  
  186. let a = ClassA()
  187. if a is ClassC { //ClassC是基类
  188. print("true")
  189. }
  190. else {
  191. print("false")
  192. }
  193.  
  194.  
  195. // 2 as
  196. //开发者希望程序在运行期间进行类型转换,这时就需要强制转化as 或者可选的类型检查符 as?
  197. // 实例 as 类型
  198.  
  199. // >1强制类型的转换
  200. let bb=ClassB()
  201.  
  202. let clsbb = bb as ClassB
  203. print("clsbb.movie==\(clsbb.movie)")
  204.  
  205.  
  206. //注意 @1相同类型的实例:在一个要检查类型的数组只可以存相同的类型
  207. //
  208. //let library = [ClassB(),ClassB(),ClassC()]
  209. //
  210. //for item in library {
  211. //let cls = item as ClassB
  212. // print(cls)
  213. //}
  214.  
  215.  
  216. // @2不可以在条件语句使用
  217.  
  218.  
  219. // >2可选类型的转换 as?
  220. // 当不确定转换是否可以成功的时候,可以使用as?
  221.  
  222.  
  223. //AnyObject 和Any的检查
  224. //对于一些类型不明确的类型,swift 提供了两种类型别名来检查,分别是AnyObject 和Any
  225. //Any比AnyObject范围更广,除了方法类型
  226.  
  227.  
  228. let library1 = [ClassA1(),ClassA2(),ClassA3(),ClassA4()]
  229.  
  230. for item in library1 {
  231. let cls = item as ClassA
  232. print(cls)
  233. }
  234.  
  235. for item:AnyObject in library1 {
  236. let cls = item as! ClassA
  237. print(cls)
  238. }
@H_19_403@

猜你在找的Swift相关文章