“隐藏”与#keyPath(UIView.isHidden)
观察者#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的通信正常进行。
我已就此提交了一个错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift对此可能表现得更聪明,但在Swift帮派回应之前,这只是您的事情知道并处理。
以上是 “隐藏”与#keyPath(UIView.isHidden) 的全部内容, 来源链接: utcz.com/qa/410072.html