在Swift使用KVC/KVO,无效是因为什么?

KVC/KVO支持是Objective-C中运行时特性,Swift中使用需要两个条件

示例:

// 1.继承自NSObject
class Person: NSObject {

    // 2.用@objc dynamic修饰对应的属性
    @objc dynamic var age: Int = 0
    
    var observation: NSKeyValueObservation?
    
    override init() {
        super.init()
        
        // block方式的KVO
        // 可以使用keyPath \类名.属性.属性
        observation = observe(\Person.age, options: NSKeyValueObservingOptions.new) { (person, change) in
            print(change.newValue as Any)
        }
    }
}

let p = Person()
p.age = 20

p.setValue(25, forKey: "age")