gpt4 book ai didi

swift - 使用仅在子类中可用的 Cocoa Bindings 绑定(bind)到属性

转载 作者:行者123 更新时间:2023-11-28 14:51:53 25 4
gpt4 key购买 nike

来自 WPF 的以下问题始终是一项简单的任务:

  • 我有一个名为 baseClass 的类,它有两个名为子类 A 和子类 B。
  • 我的 View Controller 有一个名为[baseClass] 类型的对象和名为 selectedObject 的属性输入基类。
  • 由于 subClassA 和 B 派生自baseClass,我可以将这两种类型的实例放入数组对象和 selectedObject 属性中。

现在我要制作一个 UI 来编辑这些类。它由以下部分组成:

  • 使用 NSArrayController 获取对象数组的 NSPopupButton。
  • 一个文本框,用于编辑在 baseClass 中声明的名为 name 的属性。
  • 编辑名为 nickName 的属性的文本框,在 subClassB 中声明。

我已经实现了在弹出按钮中显示对象数组的内容并将选择绑定(bind)到 ViewController 的 selectedObject。此外,我插入了一个文本字段并连接了所有内容,以便 name 属性正常工作 (self.ViewController.selectedObject.name)。

但是如何在不崩溃的情况下将第二个文本字段绑定(bind)到 nickName 属性?由于 nickName 仅在 subClassB 上可用,因此必须做什么才能使绑定(bind)仅在“选择” subClassB 实例时才被评估?这应该通过隐藏/启用的绑定(bind)来切换吗?

感谢您的帮助!

最佳答案

为您的 UI 创建一个类别/扩展,baseClass。在此扩展中,定义两个计算属性(未经测试,在浏览器中输入):

extension baseClass {
var hasNickName: Bool { return (self as? subClassB) != nil }
var editableNickName: String? {
get { return (self as? subClassB)?.nickName }
set(newName) { (self as? subClassB)?.nickName = newName }
}
}

您可以将 View 的启用/可见属性绑定(bind)到 hasNickName 并将任何值绑定(bind)到 editableNickName,这将对 subClassB 的对象起作用> 但是对于 baseClass 对象来说是一个无用的属性。

关于swift - 使用仅在子类中可用的 Cocoa Bindings 绑定(bind)到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com