Swift и Firebase не могут присвоить значение типа ‘AuthDataResult?’ типу ‘Пользователь?

#swift #firebase #firebase-authentication

#swift #firebase #firebase-аутентификация

Вопрос:

Я пересматриваю старое приложение, но прежде чем работать над новыми функциями, я хочу исправить все ошибки. Я не уверен, вызвано ли это новым синтаксисом Swift или обновлениями Firebase (или обоими), но код, который ранее работал, теперь вызывает 2 ошибки.

 var user = Auth.auth().currentUser


Auth.auth().createUser(withEmail: theEmail, password: thePassword, completion: { (user, error) in
  if let theError = error {

    var errMessage = "An unknown error occured."
    if let errCode = AuthErrorCode(rawValue: (theError._code)) {
      switch errCode {

      case .invalidEmail:
        errMessage = "The entered email does not meet requirements."
      case .emailAlreadyInUse:
        errMessage = "The entered email has already been registered."
      case .weakPassword:
        errMessage = "The entered password does not meet minimum requirements."
      default:
        errMessage = "Please try again."
      }
    }
    completion(nil, errMessage)
  } else {
    self.user = user
    completion(user, nil)
  }
})
  

В сообщении об self.user = user ошибке Cannot assign value of type 'AuthDataResult?' to type 'User?'

В сообщении об completion(user, nil) ошибке Cannot convert value of type 'AuthDataResult?' to expected argument type 'User?'

Может ли кто-нибудь объяснить, почему этот код, который когда-то работал, больше не работает и что я могу сделать, чтобы привести его в соответствие с текущими ожиданиями

Ответ №1:

Заменить

 self.user = user
  

с

 Auth.auth().createUser(withEmail: theEmail, password: thePassword, completion: { (authData, error) in

    .....

    if let res = authData?.user {
      self.user = res
    }

}