swiftclass Person: NSObject { @objc dynamic var name: String = "" var fullName: String { return "My name is " + name }}class Observer: NSObject { @objc func nameDidChange(_ change: [NSKeyValueChangeKey : Any]?) { print("Name did change") }}let person = Person()let observer = Observer()person.addObserver(observer, forKeyPath: #keyPath(Person.fullName), options: .new, context: nil)person.name = "John" // 触发KVO通知person.removeObserver(observer, forKeyPath: #keyPath(Person.fullName))
在上述代码中,我们创建了一个Person类,其中声明了一个计算属性fullName,并使用KVO监测了这个属性的变化。同时,我们还创建了一个Observer类作为观察者对象,其中定义了一个nameDidChange方法,在属性值发生变化时被调用。在代码的最后,我们使用person对象的name属性进行了赋值操作,从而触发了KVO通知。观察者对象observer的nameDidChange方法被调用,并打印出了"Name did change"的信息。通过使用KVO,我们可以简单而优雅地实现对计算属性的监听和处理。它为我们提供了一种方便的方式来响应属性值的变化,并执行相应的操作。在实际的开发中,我们可以根据需要,将KVO应用于各种场景,以提升代码的可维护性和灵活性。