我有一个类ToolbarManager
,它是从NSObject
继承的。它具有一个toolbar
属性,定义如下:
@objc dynamic let toolbar: NSToolbar
在我的类的初始化程序中,我调用以下代码:
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?
当我运行应用程序并选择 Customize Toolbar ... 或关闭自定义视图时,从不调用观察闭包,因此不会在控制台上打印任何内容。
(我该如何解决?)
您只能对从
NSObject
继承的类使用键值观察。
我不确定该如何理解。这是否意味着可以观察到NSObject
子类上定义的任何属性,还是意味着只能跟踪属于NSObject
子类的属性?
(后者将解释为什么我的代码不起作用,但是观察到普通Swift字符串的this example也不起作用。它起作用。)
答案 0 :(得分:2)
您只能对从
NSObject
继承的类使用键值观察。
意味着必须只能观察NSObject
子类中的对象。
不是并不意味着NSObject
子类中的任何对象都是隐式可观察的。
似乎NSToolbar
的此属性不符合KVO。