我把我的项目的语法切换到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:这是一个没有标签的参数的函数。因此(_ :)。下划线表示未指定标签和冒号。