簡體   English   中英

Swift:將參數傳遞給選擇器

[英]Swift: Passing a parameter to selector

使用Swift 3,Xcode 8.2.1

方法:

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:))

Timer具有共同的目標 - 動作機制。 Target通常是self,action是一個帶有一個參數sender: Timer的方法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字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM