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 自定义工具栏... 或关闭自定义视图时,永远不会调用观察闭包,因此控制台没有打印任何内容。

为什么?

(我该如何解决?)


编辑:

Apple documentation 状态:

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。