#keyPath(UIView.isHidden)
的 KVO 观察员不起作用,但"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("*");
}
}
答案 0 :(得分:9)
是错误还是功能?
让我们说这是一个众所周知的事实。 " Renamification"意味着Swift假装Objective-C Bool属性的名称以is...
开头,即使它没有。但是当涉及到KVO和属性设置器名称时,#keyPath
机制没有得到备忘录,并且实现KVO观察的属性设置器调整纯粹是一个Objective-C功能,所以你必须使用 real 属性/ setter的名称,即Objective-C名称,以便与Objective-C的通信可以正常用于KVO观察目的。
我已经提交了一份关于它的错误报告(https://bugs.swift.org/browse/SR-2415),理由是斯威夫特可以对此表现得更聪明一点,但是直到斯威夫特团伙做出回应,这只是你拥有的东西知道并处理。