了解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:这是一个没有标签的参数的函数。因此(_ :)。下划线表示未指定标签和冒号。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |