从OC到Swift(5)- 动态性,KVC\KVO
dynamic 被@objc dynamic 修饰的内容会具有动态性,比如调用方法会走runtime那一套流程 class Dog: NSObject { @objc dynamic func test1() {} func test2() {} } var d = Dog() d.test1() d.test2() 对应汇编 KVC\KVO Swift支持KVC\KVO的条件 属性所在的类、监听器最终继承自NSObject 用@objc dynamic 修饰对应的属性 class Observer: NSObject { override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { print("observeValue", change?[.newKey] as Any) } } class Person: NSObject { @objc dynamic var age: Int = 0 var observer: Observer = Observer() override init() { super.init() self