*与 *KVO的 观察者#keyPath(UIView.isHidden)不起作用,但是"hidden"起作用。
#keyPath(UIView.isHidden)
"hidden"
很奇怪。它是错误还是功能?
child.addObserver(self, forKeyPath: "hidden", options: [.initial,.new], context: nil); override func observeValue(forKeyPath keyPath: String?, of object: Any?, .change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if let view = object as? UIView, view.superview === self && keyPath == "hidden" { print("*"); } }
它是错误还是功能?
假设这是一个已知的事实。“重命名”意味着Swift假装Objective-C Bool属性的名称以is...它开头,即使不是这样。但是,#keyPath当涉及到KVO和属性设置器名称时,该机制没有得到备忘,并且繁琐的属性设置器实现KVO观察纯粹是一个Objective- C功能,因此您必须使用属性/设置器的 真实 名称,即Objective-C名称,以便出于观察KVO的目的与Objective-C的通信正常进行。
is...
#keyPath
我已就此提交了一个错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift对此可能表现得更聪明,但在Swift帮派回应之前,这只是您的事情知道并处理。