Switch入门第三讲
1 // 结构体 2 struct Student 3 { 4 //结构体的属性 5 var age: Int 6 var name: String 7 //结构体的实例方法 8 func sayHello() 9 { 10 print("hello") 11 } 12 //结构体类方法 13 static func backName() 14 { 15 print("隔壁老王") 16 } 17 } 18 //结构体的构造方法 19 var 老王 = Student(age: 38, name: "王老五") 20 21 //对象调用实例方法 22 老王.sayHello() 23 24 //类名调用类方法 25 Student.backName() 26 27 //结构体的值类型(等于把一个对象的值复制一份给新对象) 28 var 老马 = 老王 29 老王.name = "老司机" 30 print(老王.name) 31 32 //类 33 class Teacher 34 { 35 //属性 36 var name: String? //? 代表可选类型,可以给值也可以不给 37 var age: Int = 0 38 39 //类的实例方法 40 func doSomething() 41 { 42 print("敲代码") 43 } 44 45 //类方法 46 class func saySomething() 47 { 48 print("说话") 49 } 50 51 //构造方法 52 init (age: Int, name: String) 53 { 54 self.age = age 55 self.name = name 56 } 57 } 58 59 //初始化对象 60 var liuhui = Teacher(age: 40, name: "刘辉") 61 62 //调用实例方法 63 liuhui.doSomething() 64 65 //调用类方法 66 Teacher.saySomething() 67 68 //类是引用类型(等于就兑现和新对象指向同一块内存) 69 var haiyang = liuhui 70 liuhui.age = 37 71 print(haiyang.age) 72 73 //存储属性和计算属性 74 class Rect 75 { 76 //存储属性 77 var point:(x: Int, y: Int) = (0, 0) 78 var size:(w: Int, h: Int) = (0, 0) 79 //计算属性 80 var center:(x: Int, y: Int) 81 { 82 get 83 { 84 print("get") 85 return (point.x + size.w / 2, point.y + size.h / 2) 86 } 87 set 88 { 89 print("set") 90 //newValue是系统提供的set值 91 //作为计算属性,不能接收值 92 size.w = (newValue.x - point.x) * 2 93 size.h = (newValue.y - point.y) * 2 94 } 95 } 96 } 97 98 var rect: Rect = Rect() 99 rect.point = (10, 10) 100 101 //走set方法 102 //rect.point = (50, 50) 103 //print(rect.size) 104 105 rect.size = (100, 100) 106 107 //走get方法 108 print(rect.center) 109 110 //属性观察器(和OC里的KVO差不多) 111 class Animal 112 { 113 var name: String = "🐶" 114 { 115 willSet 116 { 117 //系统提供的新值 118 print(newValue) 119 } 120 didSet 121 { 122 //系统提供的旧值 123 print(oldValue) 124 } 125 } 126 //析构方法 127 deinit 128 { 129 print("被释放了") 130 } 131 } 132 133 var pig: Animal? 134 = Animal() 135 print(pig!.name) 136 pig!.name = "***🐷" 137 print(pig!.name) 138 pig = nil 139 140 141 //练习 142 class Student2 143 { 144 var name: String = "HHH" 145 { 146 willSet 147 { 148 print(newValue) 149 } 150 didSet 151 { 152 print(oldValue) 153 } 154 } 155 } 156 var TTT: Student2 = Student2() 157 print(TTT.name) 158 TTT.name = "BBB" 159 160 161 //类的继承 162 class Person 163 { 164 //final 防止父类重写方法 165 final func eat() 166 { 167 print("吃饭") 168 } 169 func sleep() 170 { 171 print("睡觉") 172 } 173 func clickDD() 174 { 175 print("打豆豆") 176 } 177 178 } 179 180 class Women: Person 181 { 182 func upBaby() 183 { 184 print("生小孩") 185 } 186 // override重写父类方法 187 // override func eat() 188 // { 189 // print("戒了") 190 // } 191 } 192 193 var 景年: Women = Women() 194 景年.upBaby() 195 景年.eat() 196 景年.sleep() 197 景年.clickDD() 198 199 200 // Extension 扩展 201 extension Women 202 { 203 func becomeWomen() 204 { 205 print("去趟泰国吧") 206 } 207 } 208 209 景年.becomeWomen() 210 211 // 类的循环引用及解决办法 212 class Boy 213 { 214 //属性 215 var name: String = "" 216 //boy有一个女朋友 217 //weak 解决循环引用 218 weak var girlFriend: Girl? 219 //构造方法 220 init (name: String) 221 { 222 self.name = name 223 } 224 //析构方法 225 deinit 226 { 227 print("boy被释放了") 228 } 229 } 230 231 class Girl 232 { 233 //属性 234 var name: String = "" 235 //girl有一个男朋友 236 var boyFriend: Boy? 237 //构造方法 238 init (name: String) 239 { 240 self.name = name 241 } 242 //析构方法 243 deinit 244 { 245 print("girl被释放了") 246 } 247 } 248 249 var 海洋: Boy? = Boy(name: "海洋") 250 var 景年1: Girl? = Girl(name: "景年") 251 252 海洋?.girlFriend = 景年1 253 景年1?.boyFriend = 海洋 254 255 海洋 = nil 256 景年1 = nil