我最近将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现在用两个可选参数调用:user
和error
。虽然确认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
的情况在