6

我在正确获取新的 KVO 语法时遇到了一些麻烦。根据苹果文档:

为关键路径创建一个观察者并调用 observe(_:options:changeHandler) 方法。有关密钥路径的更多信息,请参阅密钥和密钥路径。

class MyObserver: NSObject {
    @objc var objectToObserve: MyObjectToObserve
    var observation: NSKeyValueObservation?

    init(object: MyObjectToObserve) {
        objectToObserve = object
        super.init()

        observation = observe(\.objectToObserve.myDate) { object, change in
            print("Observed a change to \(object.objectToObserve).myDate, updated to: \(object.objectToObserve.myDate)")
        }
    }
}

let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)

observed.updateDate()

我正在像这样初始化我的观察:

self.observation = self.webView!.observe(\.webView.isLoading, changeHandler: { (webView, observedChange) in
    //code
})

但我收到此错误:

在此处输入图像描述

4

2 回答 2

10

原来语法需要是这样的,使用对象类型而不是对象实例名称:

self.observation = self.webView!.observe(\WKWebView.isLoading, changeHandler: { (webView, observedChange) in
    //code
})

误读文档¯\_(ツ)_/¯

于 2018-03-29T18:50:24.853 回答
3

如果您使用\.语法,则根元素是观察到的对象,所以它很简单

self.observation = self.webView!.observe(\.isLoading, ...

编译器将您的语法视为webView.webView.isLoading显然不是预期的。

于 2018-03-29T19:00:08.313 回答