Swift:将参数传递给选择器

2023-11-26

使用 Swift 3、Xcode 8.2.1

Method:

func moveToNextTextField(tag: Int) {
   print(tag)
}

下面的行编译得很好,但是tag有一个未初始化的值:

let selector = #selector(moveToNextTextField)
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: selector, userInfo: nil, repeats: false)

但是,我需要传递一个参数。以下无法编译:

let selector = #selector(moveToNextTextField(tag: 2))

Swift Compile Error:
Argument of #selector does not refer to an @objc method, property, or initializer.

如何将参数传递给选择器?


#selector仅描述方法签名。在您的情况下,初始化选择器的正确方法是

let selector = #selector(moveToNextTextField(tag:))

定时器具有共同的目标动作机制。目标通常是 self,而操作是一种采用一个参数的方法sender: Timer。您应该将附加数据保存到userInfo字典,并从中提取sender方法中的参数:

func moveToNextTextField(sender: Timer) {
   print(sender.userInfo?["tag"])
}
...
let selector = #selector(moveToNextTextField(sender:))
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: selector, userInfo: ["tag": 2], repeats: false)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:将参数传递给选择器 的相关文章

随机推荐