2017-03-29 7 views
0

複数のパラメータ(2つの文字列パラメータ)を使用して実行セレクタを実装する必要があります。私は関数を作成しました。 遅延メソッドの後に実行セレクタを使用してこの関数を実装する方法。swift3でperformセレクタで複数のパラメータを送信する方法は?

func addBorderLayer(textField: UITextField , placeHolder: String) { 
    textField.layer.borderColor = UIColor.init(colorLiteralRed: 254/255, green: 93/255, blue: 49/255, alpha: 1.0).cgColor 
    textField.layer.borderWidth = 1.0 
    textField.placeholder = placeHolder 
}` 

私はこのようなパラメータを渡すとき、私は私のXcodeでセグメンテーションエラーを表示し、この

self.perform(#selector(SecurityQuestionViewController.clearBorderLayer(textField:placeHolder:)), with:(textField,"Test") , afterDelay: 0.5) 

のように、このメソッドを呼び出していますが、私の問題はit.Whatにパラメータを渡す方法では、正しい方法ですパラメータを渡す?

+0

GCDを使用することを強くお勧めします。 'performSelector ...'は時代遅れです。 – vadian

+0

コメントありがとうございますが、私はこれを必要とします。これでパラメターを渡す方法を教えてください。 – akshay

+0

* this *は必要ありません。 'DispatchQueue.main.asyncAfter(deadline:.now()+ .milliseconds(500)){...}'と中かっこ内のメソッドを '...'に置き換えてください。 – vadian

答えて

3

使用(G)のrand(C)entral(D)ispatch、それはブロックベースとperformSelectorよりも使用する方が簡単です、あなたは、例えば、直接テキストフィールドのプロパティを変更し、追加のメソッドを呼び出す必要はありません。

func addBorderLayer(textField: UITextField , placeHolder: String) { 
    textField.layer.borderColor = UIColor.init(colorLiteralRed: 254/255, green: 93/255, blue: 49/255, alpha: 1.0).cgColor 
    textField.layer.borderWidth = 1.0 
    textField.placeholder = placeHolder 
    DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) { 
     textField.placeholder = "Test" 
    } 
} 
+0

その仕事..良い – akshay

関連する問題