/*
KVC 执行流程
1.对象调用 setValuesForKeysWithDictionary: 遍历键值 给对象发送setValue: forKey:
2.在 setValue: forKey: 会根据键值 检测 对象是否存在对应的属性
3.如果属性存在 就直接完成赋值的操作
4.如果属性不存在 就转发给 setValue: forUndefindKey:
5. setValue: forUndefindKey: 内部默认跑出异常 如果super 还会造成程序崩溃
*/
class Person: NSObject {
var name: String?
//this class is not key value coding-compliant for the key age.'
//在swift中调用KVC 起始还是调用OC的KVC的机制
//swift里面基本数据行不能够声明为 可选项 因为 OC里面的基本数据类型 没有可选项这一说
var age: Int = 0
//通过KVC间接赋值
init(dict: [String : AnyObject]) {
//调用KVC的通过字典字典给对象的属性设置值
//给 '对象' 发送 setValuesForKeysWithDictionary:
super.init()
self.setValuesForKeysWithDictionary(dict)
}
//这句代码是KVC内部走的 过程
override func setValue(value: AnyObject?, forKey key: String) {
super.setValue(value, forKey: key)
}
//重写,防止key键个数不符合的问题
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
}
}