Key-Value-Observing 闭包从未调用 Boolean 属性
Key-Value-Observing closure never called on Boolean property
我有一个 class ToolbarManager
继承自 NSObject
。它有一个 toolbar
属性 定义如下:
@objc dynamic let toolbar: NSToolbar
在我的 class 的初始化程序中,我调用了以下代码:
init(toolbar: NSToolbar) {
self.toolbar = toolbar
toolbar.allowsUserCustomization = true
observation = observe(\.toolbar.customizationPaletteIsRunning, options: [.old, .new]) {
(_, change) in
print("was running: \(change.oldValue)")
print("is running: \(change.newValue)")
}
}
其中observation
是另一个属性定义如下:
var observation: NSKeyValueObservation?
当我 运行 应用程序和 select 自定义工具栏... 或关闭自定义视图时,永远不会调用观察闭包,因此控制台没有打印任何内容。
为什么?
(我该如何解决?)
编辑:
You can only use key-value observing with classes that inherit from NSObject
.
我不确定如何理解这一点。这是否意味着在 NSObject
subclasses 上定义的任何 属性 都可以被观察到,还是意味着只有 NSObject
subclasses 的属性可以被观察到?跟踪?
(后者可以解释为什么我的代码不起作用,但是观察到普通 Swift 字符串的 this example 也不起作用。它 确实 工作。)
You can only use key-value observing with classes that inherit from NSObject
.
表示只能观察NSObject
子类中的对象。
它不是意味着NSObject
的子类中的任何对象都是隐式可观察的。
NSToolbar
的 属性 似乎不符合 KVO。
我有一个 class ToolbarManager
继承自 NSObject
。它有一个 toolbar
属性 定义如下:
@objc dynamic let toolbar: NSToolbar
在我的 class 的初始化程序中,我调用了以下代码:
init(toolbar: NSToolbar) {
self.toolbar = toolbar
toolbar.allowsUserCustomization = true
observation = observe(\.toolbar.customizationPaletteIsRunning, options: [.old, .new]) {
(_, change) in
print("was running: \(change.oldValue)")
print("is running: \(change.newValue)")
}
}
其中observation
是另一个属性定义如下:
var observation: NSKeyValueObservation?
当我 运行 应用程序和 select 自定义工具栏... 或关闭自定义视图时,永远不会调用观察闭包,因此控制台没有打印任何内容。
为什么?
(我该如何解决?)
编辑:
You can only use key-value observing with classes that inherit from
NSObject
.
我不确定如何理解这一点。这是否意味着在 NSObject
subclasses 上定义的任何 属性 都可以被观察到,还是意味着只有 NSObject
subclasses 的属性可以被观察到?跟踪?
(后者可以解释为什么我的代码不起作用,但是观察到普通 Swift 字符串的 this example 也不起作用。它 确实 工作。)
You can only use key-value observing with classes that inherit from
NSObject
.
表示只能观察NSObject
子类中的对象。
它不是意味着NSObject
的子类中的任何对象都是隐式可观察的。
NSToolbar
的 属性 似乎不符合 KVO。