菜鸡学Swift3.0 14.3 类的构造函数 (系统构造函数、自定义构造函数、自定义字典类型构造函数)

class Person {
      var name: String = ""
      var age: Int = 0

    // 系统构造函数
    init(){
    
    }

    // 自定义构造函数
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    // 自定义字典类型构造函数 (单个转换)
    init(dict: [String: Any]) {
        if let name = dict["name"] as? String {
            self.name = name
        }
        if let age = dict["age"] as? Int {
            self.age = age
        }
    }   
}

// 实例化 系统构造函数 Person()
let p1 = Person()
// 实例化 自定义构造函数 Person(name:"" , age:20)
let p2 = Person(name: "jack", age: 20)
// 实例化 自定义字典类型构造函数
let p3 = Person (dict: ["name": "Sun", "age": 25])

print(p3.name , p3.age)


/*
使用KVC条件
1. 必须继承自 NSObject
2. 必须在构造函数中,先调用super.init()
3. 调用 setValuesForKeys()
4. 如果字典中某一个Key没有需要调用 override func setValue(_ value: Any?, forUndefinedKey key: String) {}
*/
class Person: NSObject {
    var name: String = ""
    var age: Int = 0

// KVC
    init(dict: [String: Any]) {
        super.init()
        setValuesForKeys(dict)
    }
    // 如果字典中某个Key没有加上这句不报空
    override func setValue(_ value: Any?, forUndefinedKey key: String) {}

}

// 实例化 KVC
let p4 = Person(dict: ["name" : "Sun", "age" : 25])
print(p4.name , p4.age)

你可能感兴趣的:(菜鸡学Swift3.0 14.3 类的构造函数 (系统构造函数、自定义构造函数、自定义字典类型构造函数))