我有一个带有动态变量“值”的 vc,我需要知道它何时在调用 cv 的闭包中发生更改。
目标VC:
@objc dynamic var value: String = ""
source:
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 中的“值”发生变化时在闭包中收到通知吗?
观察者因没有引用而被销毁
在另一个视图控制器呈现之后才返回它。
你必须储存它
observer = vc.observe(\.value) { ... }
where observer
是调用视图控制器的属性。
一个独立的命令行项目示例:这将按预期打印“新字符串”:
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") }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)