8

我想使用 Swift 4 中基于块的 KVO 来观察UserDefaults. 我可以这样做来观察WKWebView's的关键路径,estimatedProgress但没有成功,UserDefaults因为提供的关键路径不是它正在寻找的。仅提供一个字符串是不够的(无法推断通用参数“值”),为其添加前缀\是不够的(表达式类型不明确,没有更多上下文)。创建KeyPath观察值的正确方法是UserDefaults什么?

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

1 回答 1

6

是的,它可能。首先,您需要将 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
于 2017-06-15T16:17:22.270 回答