“隐藏”与#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

回到顶部