Mar*_*ges 6 macos key-value-observing swift swift4
我正在使用新的Swift 4 KVO和KeyPath API来观察对象的变化。具体来说,我正在尝试观察的选择对象上的某些内容NSArrayController。问题是selectionis类型Any,这似乎与生成所需的键路径不一致,因为编译器不知道type对象的任何属性Any。
该属性的名称为assetPointHeight。我的代码如下所示:
var observation: NSKeyValueObservation?
observation = arrayController.observe(
#keyPath(NSArrayController.selection.assetPointHeight),
options: [.new],
changeHandler: { [weak self] (_, _) in
self?.updateLabel()
}
)
Run Code Online (Sandbox Code Playgroud)
我收到两个编译错误:
Value无法推断通用参数
类型'Any'没有成员'assetPointHeight'
我如何才能在这里找到想要的?还有另一种生成此KeyPath的方法吗?
我不希望它起作用,因为assetPointHeightis\xe2\x80\x99t 不是一个真实的属性selection(例如,it\xe2\x80\x99s 没有在源代码中的任何地方定义,it\xe2\x80\x99s 是在运行时创建的虚拟属性) 。我认为这里发生的\xe2\x80\x99s 是 Swift 4 版本observe(...)试图将该路径解析为静态类型但不能,因此它\xe2\x80\x99s 抛出错误。(观察也仅适用于NSObject子类,因此Any永远无法被观察到。)因此,在这种情况下,您必须使用传统的基于字符串的 KVO,如 \xe2\x80\x9cvadian\xe2\x80\x9d 所说。
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |