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

 

posted @ 2016-03-17 17:50  _小帅  阅读(242)  评论(0编辑  收藏  举报