使用NSKeyValueObservation来观察UserDefaults中的值

时间:2017-06-08 00:52:58

标签: ios swift key-value-observing swift4

我想使用Swift 4中基于块的KVO来观察UserDefaults中值的变化。我可以这样做来观察WKWebView的{​​{1}}的关键路径,但是estimatedProgress没有成功,因为提供的关键路径不是它想要的。只提供一个字符串是不够的(无法推断通用参数'值'),用UserDefaults作为前缀是不够的(表达式的类型没有更多的上下文是模糊的)。创建\以观察KeyPath中的值的正确方法是什么?

UserDefaults

1 个答案:

答案 0 :(得分:3)

是的可能。首先,您需要将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