首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“隐藏”vs #keyPath(UIView.isHidden)

“隐藏”vs #keyPath(UIView.isHidden)
EN

Stack Overflow用户
提问于 2017-01-19 16:23:00
回答 1查看 2.1K关注 0票数 8

KVO观察者与#keyPath(UIView.isHidden)不工作,但"hidden"工作。

很奇怪。是窃听器还是特征?

代码语言:javascript
复制
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("*");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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团伙做出回应之前,这只是你所知道和处理的事情。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41746751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档