gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:02:25 25 4
gpt4 key购买 nike

我正在将我的项目的语法切换到 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 基于字符串的实现相比有何不同的一般信息。

最佳答案

括号中的位是一种用于识别所需选择器的参数列表的机制。

我建议您查看 Generalized Naming来自 Swift Evolution 的提案。它涵盖了您拥有许多仅参数标签不同并且需要引用它们的函数的情况。该文档中的示例是:

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 - 了解 Swift 2.2 选择器语法 - #selector(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com