“hidden”vs #keyPath(UIView.isHidden)

#keyPath(UIView.isHidden) KVO观察者不起作用,但是"hidden"起作用。

很奇怪。 它是错误还是function?

 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("*"); } } 

它是错误还是function?

我们说这是一个已知的事实。 “Renamification”意味着Swift假装Objective-C Bool属性的名字以is...开始,即使它没有。 但是#keyPath机制在KVO和属性设置器名称方面没有得到备忘录,而实现KVO观察的属性设置器纯粹是Objective-Cfunction,所以必须使用属性/设置器的真实名称即Objective-C名称,以便与KVO观察目的的正确通信。

我已经提交了一个关于它的bug报告( https://bugs.swift.org/browse/SR-2415 ),理由是Swift在这方面可能会更聪明些,但是直到Swift团伙回应,这只是你有知道和处理。