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