使用 NSKeyValueObservation 观察 UserDefaults 中的值
Using NSKeyValueObservation to observe value in UserDefaults
我想使用 Swift 4 中的基于块的 KVO 来观察 UserDefaults
中值的变化。我能够这样做是为了观察 WKWebView
的 estimatedProgress
的关键路径,但对 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
我想使用 Swift 4 中的基于块的 KVO 来观察 UserDefaults
中值的变化。我能够这样做是为了观察 WKWebView
的 estimatedProgress
的关键路径,但对 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