Может ли UIAlertAction вызывать функцию?

Можно ли подключить функцию к UIAlertAction?

Таким образом, после того, как пользователь нажимает кнопку ОК, он выполняет действие? Разве это не то, что делает параметр обработчика?

let alert: UIAlertController = UIAlertController(title: "Email already registered", message: "Please enter a different email", preferredStyle: .Alert)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: backToLogin())

alert.addAction(okButton)
self.presentViewController(alert, animated: true, completion: nil)

...

func backToLogin() {
    self.performSegueWithIdentifier("toLoginPage", sender: self)
}

2 ответа

Решение

Вы можете использовать функцию в качестве handler, но он должен иметь правильный тип. Кроме того, вы не должны вызывать его, когда вы передаете его в качестве аргумента, т. Е. Вместо handler: backToLogin() (который установит возвращаемое значение backToLogin как обработчик) вы бы handler: backToLogin без (),

Следующее должно работать:

func backToLogin(alertAction: UIAlertAction) {
    self.performSegueWithIdentifier("toLoginPage", sender: self)
}
let okButton = UIAlertAction(title: "OK", style: .Default, handler: backToLogin)

Но нужно изменить backToLogin может победить цель, поэтому вы можете просто использовать замыкание:

let okButton = UIAlertAction(title: "OK", style: .Default) { _ in
    self.backToLogin()
}
You need to enter the handler

let okButton = UIAlertAction(title: "OK", style: .Default, handler: {

(UIAlertAction) in

self.backToLogin()

})

}

См. Этот ответ для получения дополнительной информации: Написание обработчика для UIAlertAction

Другие вопросы по тегам