- kvc 是oc特有 迅箩,KVC 本質(zhì)上是在
運(yùn)行時(shí)
,直接調(diào)用程序會(huì)崩潰
介紹
kvc 構(gòu)造函數(shù)
- kvc構(gòu)造函數(shù)的作用是字典轉(zhuǎn)模型
kvc本質(zhì)
- 動(dòng)態(tài)向'對(duì)象' 發(fā)送
setValue: forKey:
這個(gè)消息妹沙,給我們對(duì)象里面的屬性賦值
- 動(dòng)態(tài)向'對(duì)象' 發(fā)送
- 對(duì)象需要?jiǎng)?chuàng)建完成后調(diào)用kvc
使用
age 與 kvc不兼容, 因?yàn)閗vc是oc特有的, oc里面基本數(shù)據(jù)類(lèi)型不存在nil
設(shè)置初始值
var age: Int = 0
創(chuàng)建類(lèi)
class Person: NSObject {
var name: String?
var age: Int = 0
init(dict: [String : NSObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
/*
override func setValue(value: AnyObject?, forKey key: String) {
// 千萬(wàn)不要忘記調(diào)用super,否則屬性賦值失敗
// 不用調(diào)用該方法,否則會(huì)遞歸調(diào)用
//super.setValue(value, forKeyPath: key)
super.setValue(value, forKey: key)
// super.setValue(value, forKey: key)
// 1. 判斷我們key在類(lèi)里面是否定義,如果定了 那么直接賦值,否則會(huì)調(diào)用setValue(value: AnyObject?, forUndefinedKey key: String)
}
//重寫(xiě)方法
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
//不用調(diào)用super, 否則會(huì)崩潰
}
*/
}
- 調(diào)用
let person = Person(dict: ["name" : "小明", "age": 18])
print(person.name! + "---" + "\(person.age)")
- 輸出結(jié)果
小明---18