当前位置: 首页 > 面试题库 >

“隐藏”与#keyPath(UIView.isHidden)

何睿范
2023-03-14
问题内容

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

问题答案:

它是错误还是功能?

假设这是一个已知的事实。“重命名”意味着Swift假装Objective-C
Bool属性的名称以is...它开头,即使不是这样。但是,#keyPath当涉及到KVO和属性设置器名称时,该机制没有得到备忘,并且繁琐的属性设置器实现KVO观察纯粹是一个Objective-
C功能,因此您必须使用属性/设置器的 真实 名称,即Objective-C名称,以便出于观察KVO的目的与Objective-C的通信正常进行。

我已就此提交了一个错误报告(https://bugs.swift.org/browse/SR-2415),理由是Swift对此可能表现得更聪明,但在Swift帮派回应之前,这只是您的事情知道并处理。



 类似资料:
  • 问题内容: 封装和信息隐藏之间到底有什么区别? 好吧,我知道将字段设为私有,然后将字段的setter和getter设为封装。但是封装只是这个意思吗? 假设我有一个如下所述的课程。 现在,类IsThisEncapsulation是封装的示例吗? 现在将上述类中的“年龄”字段设为私有可以实现信息隐藏吗? 您能给我清楚的例子,以帮助我清楚地区分这些概念吗? 问题答案: 好吧,我知道将字段设为私有,然后将

  • 我们想隐藏“有优惠券吗?添加一张…”在WooCommerce结账时,如果已添加优惠券或客户在结账页面上添加优惠券。 目前,我们在下面有此代码,当客户在购物车页面输入优惠券,然后导航到结帐页面时,此代码有效。在这种情况下,“拥有优惠券?添加一张…”消息不可见。如果购物车页面上未添加优惠券,则消息可见。 这很好用!但是,当客户在结账页面上添加优惠券时,它不起作用。 1.)我们收到消息“优惠券已添加”,

  • 问题:如果距离为空/null,我试图隐藏一个值。 我尝试了以下操作,但该值仍在显示: 和 什么是实现我所期待的正确方法。 以下是我在coldfusion中定义距离的方式: 当我做以下建议时: ng-show="e.distance===未定义" 当我执行其他建议时,例如ng hide=“e.distance”, 以下是提供商包含的内容:

  • 输入一个语句后按回车键,MATLAB自动在屏幕上显示结果,但如果该行命令是以";"结尾,则MATLAB仍会进行运算赋值,但不显示任何输出结果.这一点在生成复杂矩阵时特别有用.例如: A = magic(100);

  • 我一直在试图从树景中隐藏项目。我使用一个自定义数据类型作为源(称为SettingsMenuItem),它继承自FrameworkElement(目前是FrameworkContentElement,因为否则TreeView会呈现错误的数据)。

  • Linux 下,名称中第一个字符为 . 的文件或者文件夹,系统会将它们隐藏起来。传统上,这种文件大多是用户的配置文件。 您可以尝试以下操作: cd ~ #进入您的用户目录 ls #查看当前目录下的文件列表 ls -a #查看所有文件的文件列表(包括隐藏文件)。 如果您只想查看隐藏文件,而不包括这两个特殊目录,您可以使用 ls 命令的选项 -A (ls -A) 每个目录下都包含