我有一个带有动态var“value”的vc,我需要知道它在调用cv的闭包中何时被更改。
目标vc:
@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中“值”发生变化时如何在闭包中得到通知?
答案 0 :(得分:4)
观察者被销毁,因为没有参考 在呈现其他视图控制器之后到它。 你必须存储它
observer = vc.observe(\.value) { ... }
其中observer
是调用视图控制器的属性。
一个独立的命令行项目示例:按预期打印“new string”:
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") }