swift4 - 使用Swift 4's KVO “observe”而不是addObserver出现问题

标签 swift4 key-value-observing observers keypaths

我在正确使用新的KVO语法时遇到了一些麻烦。
根据Apple文档:

Create an observer for the key path and call the observe(_:options:changeHandler) method. For more information on key paths, see Keys and Key Paths.


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
})

但出现此错误:

enter image description here

最佳答案

事实证明,语法需要使用对象Type而不是对象实例名称:

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

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

关于swift4 - 使用Swift 4's KVO “observe”而不是addObserver出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49563102/

相关文章:

firebase - 当应用程序在后台(最小化)时,推送通知不起作用 - iOS

javascript - ResizeObserver 是否最初在页面加载时调用?

swift - 快速测试是否支持泛型?

ios - 将 UIImage 加载到 WebView Swift 4

objective-c - 将 KVO 添加到 UITableViewCell

cocoa - 为什么 NSWindow 在解除绑定(bind)对象时成为第一响应者

r - 如何在观察者之间传递 react 值?

iOS - 使用 dealloc 删除观察者

ios - Swift 4 UITableView 单元格高度不起作用

ios - NSKeyValueObservation : Cannot remove an observer for the key path from object because it is not registered as an observer