Swift学习记录 -- 13.类的构造方法及属性监听
2016-10-03 14:36
387 查看
类的构造方法原理和OC差不多 , 只是属性手动赋值时 , 有些麻烦 , 也有些难以理解 , 不过幸好有KVC , 解决了大部分问题 . 至于属性观察 , 调用的方法想必也不陌生 , 不错 , 正是OC中咱们重写KVO set方法里的那两个方法(willChange和didChange) , 只是名字有所变化
//1.在创建对象时, 实质上已经是调用了构造函数 let p = Person() //2.初始化一个对象时就对其进行赋值 let p1 = Person(age: 18, name: "my") //3.传入字典进行对象初始化(手动赋值) let p2 = Person(dict: ["name":"my","age":18,"height":1.88]) //4.传入字典进行对象初始化 (KVC赋值) let p3 = Person(dict1: ["name":"my","age":18,"height":1.88]) //属性监听器 let dog = Dog(dict2: ["name":"ahuang","age":3])
// person类 class Person :NSObject { var age :Int = 0 var name :String? = nil //1.重写构造函数 //需要加上override override init() { super.init() //构造函数中,如果不调用父类构造函数,系统会自动调用,所以可写可不写 print("---") } //2.自定义构造函数1 (初始化对象时就进行复制) init(age:Int,name :String) { self.age = age //虽然可以直接获取age,但是为了区分,需要加上self self.name = name } //3.自定义构造函数2 (参数为字典) init(dict:[String:AnyObject]) { //注意:从字典中取出的值["name"]等为可选类型,因为取出的值是不确定的,有可能值不为空,也有可能为nil,所以写法如下 // as? 最终转换成的类型是一个可选类型 // as! 最终转换成的类型是一个确定类型 //这里没必要进行是否为空判断,因为对可选类型进行取值时,一定会进行判断 name = dict["name"] as? String //name为可选类型,需要把dict["name"]AnyObject?转换成String可选类型进行赋值 //不能直接取值进行赋值,因为["age"]为AnyObject? if let age = dict["age"] as? Int { self.age = age } } //4.自定义构造函数3 (KVC赋值,使用KVC会自动帮我们进行判断和转换 , 就跟OC里一样自动类型转换) init(dict1 : [String:AnyObject]) { super.init() setValuesForKeysWithDictionary(dict1)//调用KVC必须要先调用父类构造方法,可以不可以省略了, 因为给对象赋值,必须要先保证对象已经被创建出来 } //重写undefineKey方法 , 防止找不到对应的键进行赋值崩溃 (跟OC一样) override func setValue(value: AnyObject?, forUndefinedKey key: String) { //不进行任何操作 } }
// Dog类 (属性变化监听) class Dog: NSObject { var age = 0 { //直接在属性后面加{},写willSet和didSet对属性进行监听 //属性即将改变时监听 willSet { print("旧值:\(age)") //此处存在一临时变量 newValue(系统产生) } //属性已经改变时监听 didSet { print("新值:\(age)")//此处存在一临时变量oldValue(系统产生) } } var name:String? = nil //自定义构造函数 init(dict2 : [String :AnyObject]) { super.init() setValuesForKeysWithDictionary(dict2) } override func setValue(value: AnyObject?, forUndefinedKey key: String) { } }
相关文章推荐
- java学习记录(二)static与构造方法的回顾总结
- swift 学习记录(静态属性)
- 12.4 Swift常量存储属性与构造方法
- Kotlin学习记录(二)—— Kotlin的变量、属性、类、构造函数、继承、方法
- swift学习记录(实例方法和类型方法)
- Spring-Security (学习记录五)--配置登录时,密码采用md5加密,以及获取登录信息属性监听同步自己想要的登录信息
- 12.5 Swift可选属性与构造方法
- Swift学习记录 -- 14.闭包的使用和解决循环引用方法
- Swift 4.0学习之:构造方法
- swift学习记录(存储属性)
- swift基础学习(04)[运算符、属性、属性观察器、方法、下脚标本、继承、构造器]
- swift 学习记录(静态方法)
- Swift 系统学习 19 结构体的默认构造方法和自定义构造方法
- swift学习记录(计算属性和属性观察者)
- Swift 基础学习(构造方法初印象)
- Swift 基础学习(指定构造方法和便利构造方法)
- Swift学习笔记第六篇(类,属性,方法)
- Swift 系统学习 20 结构体 添加可失败的构造方法
- Scala学习之类和属性篇(二):定义类的辅助构造方法