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

我把我的项目的语法切换到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的Generalized Naming提案。它包括您具有多个仅由参数标签不同的函数的情况,并且需要引用它们。该文档的示例为:

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:)

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

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

Referencing the Objective-C selector of a method

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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...