Добрый день, вопрос профессионалам, помогите пожалуйста. Решил написать приложение, в нем есть стори борд с авторизацией где сложенно у меня все, авторизация, регистрация и восстановление.
Вся авторизация идет через Firebase.
Вообщем сама проблема
У меня есть два поля имя и пароль, а также кнопка входа - экшен у меня там привязанн вот такой код
@IBAction func checkLogin(_ sender: UIButton) {
let email = userEmail.text!
let passwd = userPassword.text!
if email == "" || passwd == "" || !email.isValidEMail {
userEmail.shake()
userPassword.shake()
return
}
Auth.auth().signIn(withEmail: email, password: passwd) { (user, error) in
if error != nil {
let alert = UIAlertController(title: "Ошибка!", message: (error?.localizedDescription)!, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
} else {
// TODO: Save user data to Locksmith
if let user = user {
do {
try Locksmith.saveData(data: ["user_uid": user.uid], forUserAccount: "myUserAccount")
} catch (let err) {
print(err)
}
}
let alert = UIAlertController(title: "Вы авторизированны", message: "вы зашли как: \(user?.uid)", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
let userUID = Auth.auth().currentUser?.uid
print("\(userUID)")
if userUID != nil {
self.navigationController?.popViewController(animated: true)
self.dismiss(animated: true, completion: nil)
}
}
проблема в том, что сам кложер выводит авторизацию в отдельный поток, а главный поток идет дальше. и я не могу вывести ошибки. точней UIAlert'ы вывести можно если запилить их в самом условии. Вопрос как скрыть контроллер, если пользователь авторизировался удачно, потому, что главный поток выполняется быстрее чем проходит авторизация??
PS! не пинайте я нуб в swift'e