Swift KVO和KVC底层实现原理

Swift KVO和KVC底层实现原理



import Cocoa

class SimpleClass {
    var someValue: String = "123"
}
//SimpleClass().setValue("456U", forKey: "someValue") // 错误, 必须要继承自 NSObject

// MARK: - kvc
class KVCClass :NSObject{
   @objc var someValue: String = "123"
}
let kvc = KVCClass()
kvc.someValue
kvc.setValue("456", forKey: "someValue")
kvc.someValue



// MARK: - kvo

class KVOClass:NSObject {
    @objc dynamic var someValue: String = "123"
    var someOtherValue: String = "abc"
}

class ObserverClass: NSObject {
    func observer() {
        let kvo = KVOClass()
        kvo.addObserver(self, forKeyPath: "someValue", options: .new, context: nil)
        kvo.addObserver(self, forKeyPath: "someOtherValue", options: .new, context: nil)
        kvo.someValue = "456"
        kvo.someOtherValue = "def"
        kvo.removeObserver(self, forKeyPath: "someValue")
        kvo.removeObserver(self, forKeyPath: "someOtherValue")
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
       // print("\(keyPath!) change to \(change![.newKey] as! String)")
        debugPrint("\(keyPath!) change to \(change![.newKey] as! String)")
    }
}
ObserverClass().observer()
debugPrint("123")


var mutableArray = [1,2,3]
for _ in mutableArray {
  mutableArray.removeLast()
}
debugPrint(mutableArray.description)

demo 地址:
https://gitee.com/johnson__save_admin/swift-kvokvcdemo

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容