swift KVC笔记

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 在这个方法里面什么都不需要去做。这样程序就不会奔溃了,而我们也获取了我们想要的内容,顺利的屏蔽掉了我们不想要的内容。
 

你可能感兴趣的:(█【,ios,移动开发】)