swift KVC笔记

博客讨论了遍历字典键值对,将值赋给对象对应属性时,若对象无对应属性会崩溃的问题。一般不建议重写setValue forUndefinedKey,可借此发现属性名书写错误。但有特殊需求,如只需部分键值对时,重写该方法可避免崩溃并获取所需内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值