Swift 类 中带下划线的属性?

Underscored properties in Swift classes?

我正在尝试做一些涉及 Apples 类 中的覆盖方法的事情。更具体地说,我正在尝试修改当用户单击搜索栏时将 UISearchController 的取消按钮放在屏幕上的动画。就目前而言,我的 uisearchbar 代替了我的导航项的 titleView。

但是我在右边有一个UIBarButton。当我点击搜索栏时。取消按钮从搜索栏的右边缘滑入,通过右栏按钮,右栏按钮项目不会移动。我希望取消按钮从屏幕边缘滑入。

为此,我开始寻找将搜索栏子类化的方法,以便我可以更改动画。在控制台中检查内存时,我注意到几乎所有变量都以下划线 (_cancelBarButtonItem) 开头,而且 none 其中的变量是可访问的。

我的问题是:这些变量是什么,我可以通过某种方式访问​​它们,否则我可以覆盖它们吗?

  1. 这些是 Apple 在其 类 中使用的私有变量(您可以使用 private 关键字声明您自己的变量)。在他们的名字前使用下划线只是一种约定。
  2. 可以使用键值编码 (KVC) 访问它们。在您的情况下,要获取变量,您将执行以下操作:webView.valueForKey("_cancelBarButtonItem")
  3. 如果你想设置它们,你可以这样做:webView.setValue(value, forKey: "_cancelBarButtonItem") 其中 value 是你想要设置的值。

注意:Apple 强烈反对访问他们的私有变量,这样做可能会导致您的应用被拒绝