1:两种基本的构造函数
- > 01-init(name : String,age : Int) {
- self.name = name
- self.age = age
- }
// 注意:凡是使用kvc了,都要重写:override func setValue(value: AnyObject?,forUndefinedKey key: String) {} ;因为字典里某些字段不是类的属性就可以不会报错了
- override func setValue(value: AnyObject?,forUndefinedKey key: String) {}
知识点1:
- // as? 最终转成的类型是一个可选类型
- // as! 最终转成的类型是一个确定的类型,非可选类型
知识点2:
在类里调用对象的方法如kvc方法:self可以省略,//self.setValuesForKeysWithDictionary(dict) 简写成:setValuesForKeysWithDictionary(dict)
知识点3:
一般情况下,super.init(),我们不调用,系统会自动调用,系统调用是在该方法最后调用,但是当我们调用系统的kvc方法的时候,我们一定要确保该对象已经创建了,所以我们需要提前手动调用super.init()这个方法,如:
2:代码演示:
- import UIKit
- class Person: NSObject {
- var name : String?
- var age : Int = 0
- // 在构造函数中,如果没有明确super.init(),name系统会自动帮我们调用super.init()
- override init() {
- //super.init()
- print("1111111")
- }
- // 自定义构造函数:传入基本参数
- init(name : String,age : Int) {
- print("22222")
- self.name = name
- self.age = age
- }
- // 自定义构造函数:传入一个字典
- // init(dict : [String : AnyObject]) {
- // let tempName = dict["name"]
- // //tempName是一个AnyObject?类型,转成String?
- // // as? 最终转成的类型是一个可选类型
- // // as! 最终转成的类型是一个确定的类型,非可选类型
- // name = tempName as? String
- //
- //
- //// let tempAge = dict["age"]
- //// //age = tempAge as! Int
- //// let tempAge1 = tempAge as? Int
- //// if tempAge1 != nil {
- //// age = tempAge1!
- //// }
- //// print(age)
- //
- // if let tempAge = dict["age"] as? Int {
- // age = tempAge
- // }
- // }
- init(dict : [String : AnyObject]) {
- // 提前调用super.init(),确保该对象已经创建了,不然怎么调用对象的一个kvc的方法呢
- // 一般系统会默认调用super.init(),都是在该方法的最后的地方调用,这时候已经晚了,我们需要在调用kvc方法前就需要调用
- super.init()
- // kvc 调用对象的KVC方法字典转模型
- //self.setValuesForKeysWithDictionary(dict)
- setValuesForKeysWithDictionary(dict)
- }
- override func setValue(value: AnyObject?,forUndefinedKey key: String) {}
- }
- //let p = Person()
- //let p1 = Person(name: "sky",age: 19)
- //if let name = p1.name {
- // print(name)
- //}
- //print(p1.age)
- let p2 = Person(dict: ["name" : "mike","age" : 18,"height" : 1.88])
- print(p2.age)
- if let name = p2.name {
- print(name)
- }
意见反馈邮件:1415429879@qq.com 欢迎你们的阅读和赞赏、谢谢!