加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:03:15 所属栏目:百科 来源:网络整理
导读:我把我的项目的语法切换到Swift 2.2(xCode帮助我做自动);然而,我不明白新的#selector()语法。 举个例子: timer = NSTimer.scheduledTimerWithTimeInterval(1.0,target: self,selector: #selector(MyVC.timerCalled(_:)),//new selector syntax! userInfo:
我把我的项目的语法切换到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:这是一个没有标签的参数的函数。因此(_ :)。下划线表示未指定标签和冒号。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读