Swift:传递参数给select器

使用Swift 3,Xcode 8.2.1

方法:

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

下面的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. 

我如何将parameter passing给select器?

#selector只描述方法签名。 在你的情况下,正确的方式来初始化select器

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

定时器有共同的目标 – 作用机制。 目标通常是自我,行动​​是一个参数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) 

您无法通过Timer操作传递自定义参数。

 #selector(moveToNextTextField) ... func moveToNextTextField() 

要么

 #selector(moveToNextTextField(_:)) ... func moveToNextTextField(_ timer : Timer) 

被支持,没有别的。

要传递自定义参数,请使用userInfo字典。