无法将 'User?' 类型的值转换为预期的参数类型,'User!' Firebase 注册函数中出现错误



我最近将Swift 2.0项目更新为Swift 3.0,现在我的Firebase signUp函数出现了这个错误(代码以前确实有效)。

func signUp(_ email: String, username: String, password: String, data: Data!) {
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error == nil {
// error here
self.setUserInfo(user, username: username, password: password, data: data)
}else {
print(error!.localizedDescription)
}
})
}

我非常感谢在这方面提供的任何帮助。

谢谢

FIRAuth.auth()?.createUser(withEmail: self.emailtextfield.text!, password: self.passwordtextfield.text!, completion: { (user, error) in
if let fireBaseError = error {
self.emailerror.isHidden = false
self.errorlabel.text = "(fireBaseError.localizedDescription)"
return

}
})

这对我有效

createUser的completion现在用两个可选参数调用:usererror。虽然确认error == nil必然意味着user != nil可能是真的,但Swift并不知道这一点。

我可以想出三种好方法将User?更改为User:

// What you have:
self.setUserInfo(user, username: username, password: password, data: data)
// Method 1: !
self.setUserInfo(user!, username: username, password: password, data: data)
// Method 2: if let
if let user = user {
self.setUserInfo(user, username: username, password: password, data: data)
}
// Method 3: guard let
guard let user = user else {
NSLog(error?.localizedDescription ?? "No user and no error. Weird.")
return
}
self.setUserInfo(user, username: username, password: password, data: data)

在你的情况下,我会使用方法1。在一次又一次使用user的情况下,我会使用方法2或方法3,这取决于我是希望user == nil的情况在另一层压痕内,还是希望user != nil的情况在

相关内容

最新更新