john doe
john doe

Reputation: 9660

Calling Swift Selector on an Object of Separate Class

I have the following code:

struct LoginViewModel {

    var userName :String
    var password :String

    func userNameChanged(textField :UITextField) {

    }
}

Inside my view controller I want to attach the editingChanged selector to fire the userNameChanged event:

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 

The above line is giving me issues.

UPDATE:

enter image description here

Upvotes: 2

Views: 651

Answers (1)

Alexander
Alexander

Reputation: 63272

A selector either is a string with an Objective C style selector, or a Swift method reference. You need to use one of these two:

Swift style:

#selector(LoginViewModel.userNameChanged(textField:))

Objective C style:

#selector("userNameChangedtextField:")

Whenever possible, the Swift style is preferred for its clarity and compiler-enforced correctness.

Upvotes: 5

Related Questions