如何删除使用 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
}