【问题标题】:How to observe key path on 'Any' object in Swift 4如何在 Swift 4 中观察“任何”对象的关键路径
【发布时间】:2017-10-14 12:21:02
【问题描述】:

我正在使用新的 Swift 4 KVO 和 KeyPath API 来观察对象的变化。具体来说,我试图在NSArrayController 的选择对象上观察一些东西。问题是selection 的类型为Any,这似乎与生成所需的键路径不一致,因为编译器不知道Any 类型的对象的任何属性。

该属性的名称是assetPointHeight。我的代码如下所示:

var observation: NSKeyValueObservation?

observation = arrayController.observe(
    #keyPath(NSArrayController.selection.assetPointHeight),
    options: [.new],
    changeHandler: { [weak self] (_, _) in
        self?.updateLabel()
    }
)

我得到两个编译错误:

无法推断通用参数Value
类型“Any”没有成员“assetPointHeight”

我怎样才能实现我在这里寻找的东西?还有另一种生成此 KeyPath 的方法吗?

【问题讨论】:

  • 我遇到了同样的问题。解决方案是使用传统的 KVO 方式。
  • 找到任何方法可以在不使用传统的基于字符串的 KVO 的情况下完成这项工作?

标签: swift macos key-value-observing swift4


【解决方案1】:

我不希望这会起作用,因为assetPointHeight 不是selection 上的真实属性(例如,它没有在源代码中的任何地方定义,它是在运行时创建的虚拟属性)。我认为这里发生的事情是observe(...) 的 Swift 4 版本正试图将该路径解析为静态类型并且不能,所以它抛出了一个错误。 (观察也只适用于NSObject 子类,所以Any 永远不会被观察到。)所以在这种情况下,您将不得不使用传统的基于字符串的KVO,正如“vadian”所说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2018-03-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多