gpt4 book ai didi

swift - 另一个 View Controller 中属性的内联 KVO

转载 作者:搜寻专家 更新时间:2023-11-01 06:15:50 24 4
gpt4 key购买 nike

我有一个带有动态变量“值”的 vc,我需要知道它何时在调用 cv 的闭包中更改。

目标风投:

@objc dynamic var value: String = ""

来源:

if let vc: TagButtonPopupViewController = sb.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("TagPopupViewController")) as? TagButtonPopupViewController {
// configure vc
vc.value = sender.title

// observe
_ = vc.observe(\.value) { (tbvc, change) in
print("new string")
}

// present popup
presentViewController(vc, asPopoverRelativeTo: sender.bounds, of: sender, preferredEdge: NSRectEdge.maxY, behavior: NSPopover.Behavior.transient)
}

但“观察”从未被调用。任何想法如何在 Swift4 中“值”发生变化时在闭包中得到通知?

最佳答案

观察者因为没有引用而被销毁在呈现另一个 View Controller 之后。你必须存储它

observer = vc.observe(\.value) { ... }

其中 observer 是调用 View Controller 的属性。

一个独立的命令行项目示例:这会按预期打印“新字符串”:

class A: NSObject {
@objc dynamic var value: String = ""
}

let a = A()
let observer = a.observe(\.value) { (_, _) in print("new string") } // (*)
a.value = "Hello world"

但是如果 (*) 被替换为

则不会打印任何内容
_ = a.observe(\.value) { (_, _) in print("new string") }

关于swift - 另一个 View Controller 中属性的内联 KVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45265586/

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