使用NSKeyValueObservation来观察UserDefaults中的值

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

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

是的可能。首先,您需要将keypath定义为

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

并使用基于块的KVO的keypath作为

 var observerToken:NSKeyValueObservation? observerToken = UserDefaults.standard.observe(\.isRunningWWDC, options:[.new,.old]) { (object, change) in print("Change is \(object.isRunningWWDC)") } UserDefaults.standard.set(true, forKey: "isRunningWWDC")