Switch入门第三讲
2016-03-17 17:50
495 查看
// 结构体 struct Student { //结构体的属性 var age: Int var name: String //结构体的实例方法 func sayHello() { print("hello") } //结构体类方法 static func backName() { print("隔壁老王") } } //结构体的构造方法 var 老王 = Student(age: 38, name: "王老五") //对象调用实例方法 老王.sayHello() //类名调用类方法 Student.backName() //结构体的值类型(等于把一个对象的值复制一份给新对象) var 老马 = 老王 老王.name = "老司机" print(老王.name) //类 class Teacher { //属性 var name: String? //? 代表可选类型,可以给值也可以不给 var age: Int = 0 //类的实例方法 func doSomething() { print("敲代码") } //类方法 class func saySomething() { print("说话") } //构造方法 init (age: Int, name: String) { self.age = age self.name = name } } //初始化对象 var liuhui = Teacher(age: 40, name: "刘辉") //调用实例方法 liuhui.doSomething() //调用类方法 Teacher.saySomething() //类是引用类型(等于就兑现和新对象指向同一块内存) var haiyang = liuhui liuhui.age = 37 print(haiyang.age) //存储属性和计算属性 class Rect { //存储属性 var point:(x: Int, y: Int) = (0, 0) var size:(w: Int, h: Int) = (0, 0) //计算属性 var center:(x: Int, y: Int) { get { print("get") return (point.x + size.w / 2, point.y + size.h / 2) } set { print("set") //newValue是系统提供的set值 //作为计算属性,不能接收值 size.w = (newValue.x - point.x) * 2 size.h = (newValue.y - point.y) * 2 } } } var rect: Rect = Rect() rect.point = (10, 10) //走set方法 //rect.point = (50, 50) //print(rect.size) rect.size = (100, 100) //走get方法 print(rect.center) //属性观察器(和OC里的KVO差不多) class Animal { var name: String = "🐶" { willSet { //系统提供的新值 print(newValue) } didSet { //系统提供的旧值 print(oldValue) } } //析构方法 deinit { print("被释放了") } } var pig: Animal? = Animal() print(pig!.name) pig!.name = "***🐷" print(pig!.name) pig = nil //练习 class Student2 { var name: String = "HHH" { willSet { print(newValue) } didSet { print(oldValue) } } } var TTT: Student2 = Student2() print(TTT.name) TTT.name = "BBB" //类的继承 class Person { //final 防止父类重写方法 final func eat() { print("吃饭") } func sleep() { print("睡觉") } func clickDD() { print("打豆豆") } } class Women: Person { func upBaby() { print("生小孩") } // override重写父类方法 // override func eat() // { // print("戒了") // } } var 景年: Women = Women() 景年.upBaby() 景年.eat() 景年.sleep() 景年.clickDD() // Extension 扩展 extension Women { func becomeWomen() { print("去趟泰国吧") } } 景年.becomeWomen() // 类的循环引用及解决办法 class Boy { //属性 var name: String = "" //boy有一个女朋友 //weak 解决循环引用 weak var girlFriend: Girl? //构造方法 init (name: String) { self.name = name } //析构方法 deinit { print("boy被释放了") } } class Girl { //属性 var name: String = "" //girl有一个男朋友 var boyFriend: Boy? //构造方法 init (name: String) { self.name = name } //析构方法 deinit { print("girl被释放了") } } var 海洋: Boy? = Boy(name: "海洋") var 景年1: Girl? = Girl(name: "景年") 海洋?.girlFriend = 景年1 景年1?.boyFriend = 海洋 海洋 = nil 景年1 = nil
相关文章推荐
- 求解,多线程时,线程池中一个线程内部代码抛出异常,那么这个线程能正常结束么?
- Android Activity自动重启的问题
- cookie扫盲
- dubbo简单搭建
- 一般处理程序返回Json
- Windows7安装office2010时提示报错:由于下列原因,安装程序无法继续,需要计算机安装MSXML版本6
- 求最大公约数
- BZOJ2434 [Noi2011]阿狸的打字机
- 架构相关:组件化/模块化/工程化/性能优化/开发规范与团队协作/组件间调用与通信(flex/redux)/调试与测试
- 动画问题
- js代码片段【数制转换】【判断回文】
- 看运气抽签啦!
- Quartz之CronTrigger
- 解决profile 无修改导致命令无法使用的方法
- java微信app支付-支付结果通用通知
- BZOJ 2705 Longge的问题(欧拉函数)
- 浅析android应用增量升级
- jQuery基础知识整理(1)
- 覆盖jar 类 优先级高于jar == Debug jar包 java技巧
- 数据持久化-CoreData、SQLite、FMDB