如何删除使用 observe() 添加的 KVO 观察器 API?
How to remove an KVO observer added with observe() API?
我读到 NSObject.observe<Value>()
是用于注册 KVO 观察器的新 API(在 Swift 4 中引入),它支持 Swift 键路径表达式和闭包。我想知道新 API 中注销观察者的方法是什么?
observe<Value>()
方法 returns 一个 NSKeyValueObservation
对象,它没有显式取消观察的方法(根据它的代码,当对象是由 ARC 释放)。所以似乎唯一的方法是使用旧的 NSObject.removeObserver()
,它使用旧的 keypath String 参数?
我也发现很难找到这个 observe()
API 的文档。 NSObject
doc (the doc contains description of observeValue()
but not this observe<Value>
), and code completion in XCode doesn't work with it. The only place I found it was mentioned in Apple official doc is this article Using Key-Value Observing in Swift中没有提到它。这让我想到这是未完成的还是正在进行的工作? (但考虑到它是在 Swift 4 时间范围内引入的,我对此表示怀疑)。
使用键值观察的例子
/// define an Observer
var observation: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
/// start observation
observation = view.observe(\.backgroundColor, options: [.old, .new], changeHandler: { (view, value) in
})
/// invalidate observation
observation?.invalidate()
observation = nil
}
我读到 NSObject.observe<Value>()
是用于注册 KVO 观察器的新 API(在 Swift 4 中引入),它支持 Swift 键路径表达式和闭包。我想知道新 API 中注销观察者的方法是什么?
observe<Value>()
方法 returns 一个 NSKeyValueObservation
对象,它没有显式取消观察的方法(根据它的代码,当对象是由 ARC 释放)。所以似乎唯一的方法是使用旧的 NSObject.removeObserver()
,它使用旧的 keypath String 参数?
我也发现很难找到这个 observe()
API 的文档。 NSObject
doc (the doc contains description of observeValue()
but not this observe<Value>
), and code completion in XCode doesn't work with it. The only place I found it was mentioned in Apple official doc is this article Using Key-Value Observing in Swift中没有提到它。这让我想到这是未完成的还是正在进行的工作? (但考虑到它是在 Swift 4 时间范围内引入的,我对此表示怀疑)。
使用键值观察的例子
/// define an Observer
var observation: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
/// start observation
observation = view.observe(\.backgroundColor, options: [.old, .new], changeHandler: { (view, value) in
})
/// invalidate observation
observation?.invalidate()
observation = nil
}