# #swift #firebase #firebase-authentication
Вопрос:
Попробуйте создать страницу входа в систему в swift, затем я хочу проверить определенное условие для возврата ошибки.
из печати(Ошибка.локализованное описание) Я получаю какую-то отдачу, например
- Пароль неверен или у пользователя нет пароля.
- Нет записи пользователя, соответствующей этому идентификатору.
Как проверить это условие на основе Error.localizeDescription ?
Auth.auth().signIn(withEmail: email, password: pass, completion: {[weak self] result, Error in
guard let StrongSelf = self else{
return
}
if let Error = Error {
print(Error.localizedDescription)
}
guard Error == nil else{
// in here there is validation of return error (e.g. wrong password, account not exist)
self?.reasonLabel.isHidden=false
self?.reasonLabel.text=Error
return
}
self!.checkinfo()
})
Комментарии:
1. Привет, Лаувис. Есть какие-нибудь новости здесь? 👆
Ответ №1:
Во-первых, вы не должны объявлять какое-либо свойство с заглавной буквы, вместо этого используйте строчные или верблюжьи буквы, если это необходимо. во-вторых, если вы используете [слабое я] и создаете условие guard let, затем используйте сильное, чтобы предотвратить цикл сохранения и постарайтесь не использовать принудительное разворачивание.
Auth.auth().signIn(withEmail: email, password: pass, completion: {[weak self] result, error in
guard let self = self else { return }
if let error = error {
print(error.localizedDescription)
let alert = UIAlertController.configureAlertController(error.localizedDescription)
self.present(alert, animated: true)
return
}
// your logic
/* or
if let error = error {
print(error.localizedDescription)
UIAlertController. showAlert(error.localizedDescription)
}else{
// your logic
}
*/
/* or
guard let result = result else {
UIAlertController. showAlert(error?.localizedDescription ?? "unknown error")
return
}
// your logic
*/
/*
or some else, but avoid force unwrap
*/
})
Обратите внимание, что ваше if let
заявление с проверкой ошибок не помешает выполнению всего вашего кода и self!.checkinfo()
будет выполнено, return
в конце if let error..
сообщит вашему методу, что ему нужно остановиться
extension UIAlertController {
static func configureAlertController(with title: String = "Attention", message: String) -> (UIAlertController){
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let action = UIAlertAction(title: "ОК", style: .default) {(action) in}
alertController.addAction(action)
return alertController
}
}
Комментарии:
1. есть ли какая-либо причина, по которой появляется всплывающее окно о том, что у UIAlertController нет элемента configureAlertController
2.не уверен, что вы имеете в виду, создайте расширение для UIAlertController, создайте свой собственный метод и назовите его configureAlertController — это будет элемент ur. Если вам не нужен UIAlertController, но вам нужно
self.reasonLabel.isHidden = false
self.reasonLabel.text = error.localizedDescription
сделать это вместо предупреждения3. @lauwispremium каким-либо образом эта часть вашего кода не вызывает ошибку компиляции?
self?.reasonLabel.text=Error
это должно быть своего родаself?.reasonLabel.text=Error.localizedDescription
— этоString
Ответ №2:
Если вы хотите предпринять определенное действие на основе ошибки, вызванной проверкой подлинности Firebase, анализ Error.localizeDescription
-не лучший способ сделать это. Вместо этого проверьте ошибку code
NSError
объекта, которую вы получаете в обработчике завершения, снова по значениям, указанным в документации по обработке ошибок.
Например (на основе этого репо:
switch error {
case let .some(error as NSError)
where UInt(error.code) == FUIAuthErrorCode.userCancelledSignIn.rawValue:
print("User cancelled sign-in")
case .none:
if let user = authDataResult?.user {
signed(in: user)
}
}
}