当前位置:  开发笔记 > IOS > 正文

"hidden"vs #keyPath(UIView.isHidden)

如何解决《"hidden"vs#keyPath(UIView.isHidden)》经验,为你挑选了1个好方法。

KVO观察员#keyPath(UIView.isHidden)不起作用,但"hidden"工作.

很奇怪.是bug还是功能?

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

matt.. 9

是bug还是功能?

让我们说这是一个众所周知的事实."重命名"意味着Swift假装Objective-C Bool属性的名称is...即使它没有开始.但是#keyPath当涉及KVO和属性设置器名称时,该机制没有获得备忘录,并且实现KVO观察的属性设置器纯粹是一个Objective-C功能,所以你必须使用属性/ setter 的真实名称,即Objective-C名称,以便与Objective-C的通信正确地用于KVO观察目的.

我已经提交了一份关于它的错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift可以对此表现得更聪明一点,但是直到Swift团伙回应,这只是你的事情.了解和处理.



1> matt..:

是bug还是功能?

让我们说这是一个众所周知的事实."重命名"意味着Swift假装Objective-C Bool属性的名称is...即使它没有开始.但是#keyPath当涉及KVO和属性设置器名称时,该机制没有获得备忘录,并且实现KVO观察的属性设置器纯粹是一个Objective-C功能,所以你必须使用属性/ setter 的真实名称,即Objective-C名称,以便与Objective-C的通信正确地用于KVO观察目的.

我已经提交了一份关于它的错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift可以对此表现得更聪明一点,但是直到Swift团伙回应,这只是你的事情.了解和处理.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有