在 Swift 中捕获系统音量变化

Capture system volume changes in Swift

阅读以下关于在 osX 中获取和设置系统音量的建议,我使用 ISSoundAdditions 效果很好:

Change Volume on Mac programmatically

我可以使用 NSSlider(带绑定)直接管理系统音量。 我的问题是:如何将音量变化捕获为事件(例如,当键盘上的音量增大和减小键时?在这些情况下,我的滑块没有反应。 我试过了:

self.addObserver(self, forKeyPath: "volume.systemVolume", options: NSKeyValueObservingOptions.New, context: &volumeContext)

但后来我得到一个例外:

Cannot update for observer XX for the key path "volume.systemVolume", most likely because the value for the key "volume" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the class.

顺便说一句,systemVolume 属性 是一个 class 属性,如果重要的话?

非常感谢您的帮助

约书亚

我用了 (Swift 4):

DistributedNotificationCenter.default.addObserver(self,
                                           selector: #selector(eventFunction(_:)),
                                           name: NSNotification.Name(rawValue: "com.apple.sound.settingsChangedNotification"),
                                           object: nil)

函数定义如下:

@objc func volumeChangeEvent(_ evt: NSEvent) { }