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

了解Swift 2.2选择器语法-#selector()

孟哲
2023-03-14
问题内容

我正在将项目的语法切换到Swift 2.2(xCode可以帮助我自动完成);但是,我不理解新#selector()语法。

举个例子:

timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, 
             selector: #selector(MyVC.timerCalled(_:)), //new selector syntax!
             userInfo: nil, repeats: true)

这有选择器 #selector(MyVC.timerCalled(_:))

_:意味着什么?您可以将其他变量添加到此选择器吗?说,#MyVC.timerCalled(_:whateverVar)

与早期版本的Swift的基于字符串的实现相比,此语法有何不同的一般信息将受到极大的赞赏。


问题答案:

括号中的位是一种用于标识所需选择器的参数列表的机制。

我建议您查看Swift Evolution 的“ 通用命名”建议。它涵盖了您具有许多功能的情况,这些功能仅因其参数标签不同而需要引用它们。该文档中的示例为:

extension UIView {
  func insertSubview(view: UIView, at index: Int)
  func insertSubview(view: UIView, aboveSubview siblingSubview: UIView)
  func insertSubview(view: UIView, belowSubview siblingSubview: UIView)
}

如果要获取其中之一的函数值,则结果不明确:

let fn = someView.insertSubview // ambiguous: could be any of the three methods

实现的解决方案是在没有任何类型信息的代码中添加参数标签,该代码会生成要消除歧义的函数值:

let fn = someView.insertSubview(_:at:)
let fn1 = someView.insertSubview(_:aboveSubview:)

看看如何在标签中添加标签?

该建议在最直接适用于您的问题的建议中发挥了作用:

引用方法的Objective-C选择器

在这种特殊情况下,您要引用的选择器timerCalled:是一个没有标签的参数的函数。因此(_ :)。下划线表示未指定标签和冒号。



 类似资料:
  • 本文向大家介绍深入了解java NIO之Selector(选择器),包括了深入了解java NIO之Selector(选择器)的使用技巧和注意事项,需要的朋友参考一下 这一节我们将探索选择器(selectors)。选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能。就像在第一章中描述的那样,就绪选择和多元执行使得单线程能够有效率地同时管理多个 I/O 通道(channels)。C

  • 本文向大家介绍jQuery选择器之属性筛选选择器用法详解,包括了jQuery选择器之属性筛选选择器用法详解的使用技巧和注意事项,需要的朋友参考一下 在这么多属性选择器中[attr="value"]和[attr*="value"]是最实用的 [attr="value"]能帮我们定位不同类型的元素,特别是表单form元素的操作,比如说input[type="text"],input[type="che

  • Python的状态(版本 3 和版本 2) 选择 Python 解释器时,总会出现一个令人窘迫的问题:“我应该选择Python 2 还是 Python 3”? 答案比人们想象的要复杂的多。 大致的基本情况如下: 今天大多数生产应用程序都在使用 Python 2.7。 Python 3 已经可以在今天的应用程序上生产部署。 Python 2.7 只会在 2020 年之前获得必要的安全更新[[6]](

  • 本文向大家介绍jQuery表单选择器用法详解,包括了jQuery表单选择器用法详解的使用技巧和注意事项,需要的朋友参考一下 表单选择器 1. :button Selector   1. jQuery(":button")   2. 选择所有元素和类型为按钮的元素 2. :checkbox Selector   1. jQuery(":checkbox")   2. 选择所有元素和类型为复选框的元素

  • 问题内容: 我想了解CSS选择器如何处理属性冲突。如何选择一项财产而不是另一项财产? 选择器优先级如何工作? 问题答案: 我将仅介绍CSS 2.1规范本身的链接,以及浏览器 应 如何计算特异性: CSS 2.1第6.4.3节: 选择器的特异性计算如下: 如果声明的来源是’style’属性而不是带有选择器的规则,则计数为1,否则为0;否则(= a)(在HTML中,元素的“ style”属性的值是样式

  • 我想了解CSS选择器是如何处理属性冲突的。如何选择一个属性而不是另一个属性? null null 选择器优先级是如何工作的?