使用 NSKeyValueObservation 观察 UserDefaults 中的值

Using NSKeyValueObservation to observe value in UserDefaults

我想使用 Swift 4 中的基于块的 KVO 来观察 UserDefaults 中值的变化。我能够这样做是为了观察 WKWebViewestimatedProgress 的关键路径,但对 UserDefaults 没有成功,因为提供的关键路径不是它正在寻找的。仅提供一个 String 是不够的(无法推断出通用参数 'Value'),用 \ 作为前缀是不够的(表达式类型在没有更多上下文的情况下不明确)。创建 KeyPath 以观察 UserDefaults 中的值的正确方法是什么?

observerToken = UserDefaults.standard.observe("myvalue") { (object, change) in
    //...
}

是的,它是 possible.First 所有你需要将 keypath 定义为

extension UserDefaults
{
    @objc dynamic var isRunningWWDC: Bool
    {
        get {
            return bool(forKey: "isRunningWWDC")
        }
        set {
            set(newValue, forKey: "isRunningWWDC")
        }
    }
}

并将该键路径用于基于块的 KVO 作为

var observerToken:NSKeyValueObservation?
observerToken = UserDefaults.standard.observe(\.isRunningWWDC, options:[.new,.old])
{ (object, change) in

    print("Change is \(object.isRunningWWDC)")

}
UserDefaults.standard.isRunningWWDC = true