2017-04-13 5 views
3

私はSwift 3でセレクタメソッドをたくさん検索しましたが、私はそれに多くの混乱をもたらします。swift 3引数のあるセレクタ

1)Selector & #selectorの違いは何ですか?

2)Selectorと記述すると、その機能はアウトライン化されていますか?

3)#selectorメソッドでパラメータを渡す方法。

私のコードは

let button = UIButton()  
button.addTarget(self, action: #selector(getData(_:true)), for: .touchUpInside) 
button.addTarget(self, action: Selector(), for: .touchUpInside) 

func getData(_ isShowing:Bool){ 

    } 

あなたは私の混乱をクリアするために助けることができますか?

は、私は#selectorがちょうどタイプSelectorのオブジェクトを作成し、言語構造であると考えてい

+0

はこの1つのhttp://stackoverflow.com/questions/41520683/swift-3-unrecognized-selector-sent-to-instance-uibutton –

+0

について質問3との比較だけで( '#selectorを使用getData) 'パラメータを指定する必要はありません。 –

+0

@LeoDabus、あなたの答えをありがとうが、私は条件を確認するための値を渡す必要があります。 – user1673099

答えて

1

あなたの貴重な時間をありがとうございました。コンパイラがメソッドがどこにでも存在するかどうかを実際に確認する際に#selectorを使用したい場合は、Selector("abc")を実行するとコンストラクタを実行するだけで、検証されません。ご質問

2

回答:

  1. セレクタタイプです。 (それが関数型であることを示すため)。一方、#セレクタは関数を呼び出すことです。 #selector - >はSelectorタイプを返します。 #selectorは、その関数名に関数が存在するかどうかを確認します。
  2. 最初の答えはこれを明確にします
  3. このように送信者から値を送信できます。例:button.layer.setValue(forKey:"someKey")
+2

#3:あなたはKVOに準拠しているものに対してのみ、任意の値に対してこれを行うことはできません。 OPが望んでいるものに関して、彼はこのように彼の 'Bool'を渡すことはできません。 – Losiowaty

関連する問題