class myModel: NSObject {
// MARK:- 定义属性
var name : String = ""
var url : String = ""
// MARK:- 自定义构造函数
override init() {
}
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
print(key)
}
}
问题:遍历字典中的key值和value值,去对象中寻找与key相对应的属性,然后把value赋值给对应的对象的属性,
当我们在对象中找不到key值所对应的属性的时候,会奔溃
方法:重写setValue forUndefinedKey
override func setValue(_ value: Any?, forUndefinedKey key: String) {
print(key)
}
一般情况下,我们不会去重写这个方法,因为在写数据模型的时候,很有可能把属性的名字写错,这样程序一运行就会出错,我们可以知道自己哪里出错了。
但是如果你重写了,错误信息就没了。
当然,当我们有一些特殊需求的时候,可以去重写这个方法,比如说,字典中定义了很多键值对,但是我们的数据模型中,只使用了一部分,这个时候,我们通过重写 setValue forUndefinedKey 在这个方法里面什么都不需要去做。这样程序就不会奔溃了,而我们也获取了我们想要的内容,顺利的屏蔽掉了我们不想要的内容。