将静态参数添加到Swift中的#selector [英] Add static parameter to #selector in Swift

查看:689
本文介绍了将静态参数添加到Swift中的#selector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is it possible to pass an int variable via a selector, e.g. #selector(run(1)) or #selector(run(2))

如有必要,可提供更多上下文:

More context if necessary:

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


推荐答案

确认一些iOS开发者后,不,你不能做到这一点。

After confirming to some iOS Developers, no you can't do this yet.

但还有另一种选择。您可以在操作方法中接收发件人对象。您可以将任何属性添加到sender类。并接受该行动方法。

But there is an alternative. You can receive the sender object in the action method. You can add any property to the sender class. And receive that in action method.

例如:

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

你可以像这样收到它

func run(sender: UIBarButtonItem) {
    let passedInteger = sender.tag
}

但只有传递的参数是单个整数才有效。如果你想用任何数据类型传递多个参数,你可以这样做 - >看第二种方法

But it only work if the passed parameter is a single Integer. Here's how you can do it if you want to pass multiple parameter with any data type -> Look at Second Approach

Subclass UIBarButtonItem

Subclass UIBarButtonItem

class MyBarButtonItem: UIBarButtonItem {
    var passedParameter: String?
}

并按此收到

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
}

这篇关于将静态参数添加到Swift中的#selector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆