gpt4 book ai didi

swift - 我可以快速观察可选值吗?如果不是,我将如何尝试观察变化?

转载 作者:行者123 更新时间:2023-11-28 12:05:26 25 4
gpt4 key购买 nike

我正在尝试观察 Swift 4 中 NSPopUpButton 选择的变化。在我的 View Controller 的 viewDidLoad() 中,我设置了观察标记以观察 NSPopUpButton 的 selectedItem 属性

override func viewDidLoad() {
super.viewDidLoad()

observation = observe(\.myPopUpButton.selectedItem) {
objectToObserve, change in

if change.kind == NSKeyValueObservedChange.Kind.setting {
// code to execute goes here
}
}

我在设置了 observation 的行上设置了一个断点,以确定 token 是使用正确的 key 路径配置的。我还在闭包内设置了一个 break 以查看它何时执行。当我更改 NSPopUpButton 的选择时,闭包不会执行。

selectedItem 的类型是 NSMenuItem?,所以我怀疑我无法对可选属性设置观察。但我在 Apple 的文档中找不到任何说明是否属于这种情况的内容,而且我不确定我将如何为自己进行验证。

所以我有一些主要问题和一些后续问题:

  • 我可以观察 Swift 4.1 中的可选属性吗?
    • 如果是这样,我该如何解决这个问题,我做错了什么?
    • 如果没有,我该如何着手尝试监视 NSPopUpButton 的状态?

我已经尝试过的故障排除...

  • @objc dynamic 添加到我的 myPopUpButton 声明

最佳答案

许多 AppKit 对象的许多属性符合 KVO。除非文档明确说明该属性是合规的,否则您应该假定它不合规。 NSPopUpButtonselectedItem 属性不合规。

通知弹出按钮的选定项更改的最简单方法是设置按钮的targetaction:

    override func viewDidLoad() {
super.viewDidLoad()
myPopUpButton.target = self
myPopUpButton.action = #selector(popUpButtonDidFire(_:))
}

@IBAction private func popUpButtonDidFire(_ sender: Any) {
// code to execute goes here
}

请注意,如果您在 Storyboard 或 xib 中创建弹出按钮,您可以通过控制从弹出按钮拖动到 View Controller 来将其连接到 popUpButtonDidFire 方法.

关于swift - 我可以快速观察可选值吗?如果不是,我将如何尝试观察变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414984/

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