在Swift中将静态参数添加到#selector

xoo*_*ler 3 selector ios swift

是否可以通过选择器传递int变量,例如#selector(run(1))或#selector(run(2))

必要时提供更多背景信息:

let button = UIBarButtonItem(title: "Run",
                             style: UIBarButtonItemStyle.Plain,
                             target: self,
                             action: #selector(run(1)))
Run Code Online (Sandbox Code Playgroud)

Edw*_*ony 6

向某些iOS开发者确认后,还不能执行此操作。

但是还有另一种选择。您可以在action方法中接收发送方对象。您可以将任何属性添加到发送方类。并采取行动中的方法。

例如:

第一种方法

let button = UIBarButtonItem(title: "Run",
                                   style: .Plain,
                                   target: self,
                                   action: #selector(run(_:)))
button.tag = 1
Run Code Online (Sandbox Code Playgroud)

这样你就可以收到

func run(sender: UIBarButtonItem) {
    let passedInteger = sender.tag
}
Run Code Online (Sandbox Code Playgroud)

但是,仅当传递的参数是单个Integer时才有效。如果要传递任何数据类型的多个参数,请按以下步骤操作->查看第二种方法

第二种方法

子类UIBarButtonItem

class MyBarButtonItem: UIBarButtonItem {
    var passedParameter: String?
}
Run Code Online (Sandbox Code Playgroud)

并像这样收到它

let button = MyBarButtonItem(title: "Run",
                                   style: .Plain,
                                   target: self,
                                   action: #selector(run(sender:)))

button.passedParameter = "John Doe"

func run(sender: MyBarButtonItem) {
    // now you have the parameter
    let parameter = sender.passedParameter
}
Run Code Online (Sandbox Code Playgroud)