2016-06-17 6 views
3

セレクタを介してint変数を渡すことは可能ですか? #selector(ラン(1))、または#selector(ラン(2))Swiftの#selectorに静的パラメータを追加

もっとコンテキスト必要に応じて:一部のiOS開発者に確認した後に

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

答えて

4

、いいえ、あなたはまだこれを行うことはできません。

しかし、別の方法があります。アクションメソッドで送信者オブジェクトを受け取ることができます。任意のプロパティを送信側クラスに追加できます。そしてそれを行動方法で受け取る。例えば

まずアプローチ

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

そして、あなたはこの

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

のようにそれを受け取ることができますが、渡されたパラメータが単一の整数である場合にのみ動作します。ここでは、任意のデータ型で複数のパラメータを渡したい場合は、あなたがそれを行うことができる方法だ - >第二のアプローチを見

第二のアプローチは

サブクラス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 
} 
+0

方法です。 – xoogler

0

たとえば、すべてのメソッドシグネチャについて、あなたはそれに静的パラメータを追加することはできませんありません

ですが、エドワードが述べたように、ボタン自体を通して値を渡すことも可能です。

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

.....

func run(sender: UIButton){ 
    doSomething(sender.tag) 
} 

推奨されないタグを介して値を渡すが、これはそれが受理された後、実質的にあなたの答えを変更しないでください

関連する問題