2017-01-15 15 views
0

上スウィフトセレクタを呼び出すは、私は次のコードを持っている別のクラスのオブジェクト

class LoginViewController : UIViewController { 

    var loginVM :LoginViewModel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     loginVM = LoginViewModel(userName: "", password: "") 

     let userNameTextField = UITextField(frame: CGRect(x: 20, y: 100, width: 100, height: 44)) 
     userNameTextField.backgroundColor = UIColor.red 

     userNameTextField.addTarget(loginVM, action: #selector("loginVM.userNameChanged"), for: .editingChanged) // THIS IS NOT WORKING 

上記の行は私に問題を与えている。

UPDATE:

enter image description here

+0

それで、あなたが提供しているfixitを適用してみませんか? o.0 ' – Alexander

答えて

2

セレクタのいずれかのObjective Cスタイルの選択、またはスウィフトメソッド参照を含む文字列です。

スウィフトスタイル:

#selector(LoginViewModel.userNameChanged(textField:)) 

のObjective Cのスタイル:あなたはこれら二つのいずれかを使用する必要があります

#selector("userNameChangedtextField:") 

可能な限りの、スウィフトのスタイルは、その明確にするため好ましいです。

+0

更新された質問をご覧ください。それでも同じ問題があります。私はこのコードをPlaygroundで実行しています。おそらくthats問題です。 –

+1

私は気づいたばかりです:Objective Cランタイムで構造体を使用することはできません。 '@ objc'に明示的に注釈を付けるクラスや、' NSObject'のようにObjective Cのクラスに由来するクラスのみを使用できます。 – Alexander

+0

うわー!それはそれだった。感謝万円。 –

関連する問題