macOS:向 Cocoa 绑定公开 Swift 属性的正确方法

2024-01-05

我正在 Mac 上开发一个现有的 Swift/Objective-C 项目,并在代码中创建一些 UI。我根据我管理的 NSTableView 中的选择启用一个按钮without使用 NSArrayController (出于原因)。

我有一处房产selectionIndexes on MyController:

@objc var selectionIndexes : IndexSet = IndexSet()

我不确定是否@objc使其对 Cocoa Bindings 系统可见是必要的。

我连接按钮的enabled绑定使用:

newButton.bind(NSBindingName.enabled, to: MyController.sharedInstance,
     withKeyPath: "selectionIndexes", 
     options: [NSBindingOption.valueTransformer : MyTransformer()])

这工作正常,使用正确的属性调用变压器并正确设置启用,但对选择的更改不会触发绑定,因此该按钮保持禁用状态。

我必须明确告诉系统我正在更改该值,例如

self.willChangeValue(for: \.selectionIndexes )
self.selectionIndexes = proposedSelectionIndexes
self.didChangeValue(for: \.selectionIndexes)

这看起来很蹩脚。有更好的方法吗?


@objc将该属性公开给 Objective-C 运行时是必要的。

要使属性键值观察兼容,您必须添加dynamic keyword

@objc dynamic var selectionIndexes = IndexSet()

并删除...ChangeValue(for lines

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

macOS:向 Cocoa 绑定公开 Swift 属性的正确方法 的相关文章

随机推荐