KVO观察者与#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("*");
}
}发布于 2017-01-19 16:47:04
是窃听器还是特征?
假设这是一个众所周知的事实。“变相化”指的是,Swift假装一个目标的名称--C Bool属性的名称--即使不是is...。但是,当涉及到KVO和属性设置者的名称时,#keyPath机制没有得到备忘,而属性设置者为实现KVO观察而进行的快速调整纯粹是一个目标-C特性,所以您必须使用属性/ setter的真实名称,即目标-C名,这样与Objective的通信就可以正确地用于KVO的观察目的。
我已经在上面提交了一份错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift在这方面可能表现得更聪明一些,但在Swift团伙做出回应之前,这只是你所知道和处理的事情。
https://stackoverflow.com/questions/41746751
复制相似问题