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

前端之家收集整理的这篇文章主要介绍了了解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:这是一个没有标签的参数的函数。因此(_ :)。下划线表示未指定标签和冒号。

猜你在找的Swift相关文章