- kvc 是oc特有 ,KVC 本质上是在
运行时
,直接调用程序会崩溃
介绍
kvc 构造函数
- kvc构造函数的作用是字典转模型
kvc本质
- 动态向'对象' 发送
setValue: forKey:
这个消息,给我们对象里面的属性赋值
- 动态向'对象' 发送
- 对象需要创建完成后调用kvc
使用
age 与 kvc不兼容, 因为kvc是oc特有的, oc里面基本数据类型不存在nil
设置初始值
var age: Int = 0
创建类
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) {
// 千万不要忘记调用super,否则属性赋值失败
// 不用调用该方法,否则会递归调用
//super.setValue(value, forKeyPath: key)
super.setValue(value, forKey: key)
// super.setValue(value, forKey: key)
// 1. 判断我们key在类里面是否定义,如果定了 那么直接赋值,否则会调用setValue(value: AnyObject?, forUndefinedKey key: String)
}
//重写方法
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
//不用调用super, 否则会崩溃
}
*/
}
- 调用
let person = Person(dict: ["name" : "小明", "age": 18])
print(person.name! + "---" + "\(person.age)")
- 输出结果
小明---18