无法转换值类型“用户?”预期的参数类型“用户!”
我刚刚升级了Firebase的Xcode项目中的pod文件,并显示了一堆错误。注册用户时,出现错误Cannot convert value type "User?" to expected argument type "User!"
无法转换值类型“用户?”预期的参数类型“用户!”
我不确定问题出在哪里。我试着改变一些可选的值来使它工作,但我似乎并没有很好地理解这个问题。
这里的功能,我有错误:
的代码已被修改,以解决我的问题
import Firebase
// Sign Up Function
func signUp(username: String, name: String, email: String, password: String){
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error == nil {
self.setUserInfo(user: user, username: username, name: name, email: email, password: password)
}
else{
print(error?.localizedDescription as Any)
}
})
}
// Set the user info to Firebase storage. username, and password
private func setUserInfo(user: Firebase.User!, username: String, name: String, email: String, password: String){
if error == nil {
self.saveUserInfo(user: user, username: username, name: name, password: password)
}
else{
print(error?.localizedDescription as Any)
}
}
编辑: 作为用户ryanwils提到的,无论我用FIRUser
需要替换为Firebase.User
下面是Migratio的链接n指南的进一步解释了这一点:https://firebase.google.com/docs/reference/ios/naming-migration-guide
注意,代码已更新,没有错误给出此编辑
新的火力地堡的版本,所以现在FIRUser
被称为User
掉在大多数类型的FIR
前缀。您的应用中是否已有User
结构或类?如果是这样,您需要更改setUserInfo
呼叫中的参数应接受Firebase.User
(通知号!
),而不是User!
。
然后,当你调用它,你可以用if let
,guard let
或力展开它user!
抓住它,当你经过入。
让我知道这是不是这样,我可以尝试进一步帮助!
编辑:包含指向Firebase 4 Swift Migration Guide的链接,该链接解释了所有必要的更改。
我明白你的意思。 reddit上的其他人向我发送了https://firebase.google.com/docs/reference/ios/naming-migration-guide的链接,这些链接稍微解释了一下。谢谢您的帮助! –
很高兴它工作:) – ryanwils
在火力完成处理的一天的用户对象是可选但在你的方法中,你期望的是非可选的用户对象。你能解决这个问题,如:
// Sign Up Function
func signUp(username: String, name: String, email: String, password: String
{
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if error == nil && user != nil
{
// error happens here
self.setUserInfo(user: user!, username: username, name: name, email: email, password: password)
}
else
{
print(error?.localizedDescription as Any)
}
})
}
// Set the user info to Firebase storage. Profile picture change, username, and password
private func setUserInfo(user: User, username: String, name: String, email: String, password: String)
{
if error == nil
{
self.saveUserInfo(user: user, username: username, name: name, password: password)
}
else
{
print(error?.localizedDescription as Any)
}
}
当我添加'!'时,它会返回以下内容:'不能将值类型“User”转换为期望的参数类型“User!”# –
@BrunoRecillas:您可以检查更新后的代码吗? –
我得到以下内容:'不能将值类型“用户?”转换为期望的参数类型“用户”# –
您收到用户在完成块鉴于收到错误为零。所以基本上用户的类型是可选的。
private func setUserInfo(user: User?, username: String, name: String, email: String, password: String){
if error == nil && user != nil
{
self.saveUserInfo(user: user!, username: username, name: name, password: password)
} else {
print(error?.localizedDescription as Any)
}
试过了。它给了我下面的内容:'不能将值类型“User?”转换为期望的参数类型“User?”' –
我不明白为什么它会在你的答案后给出错误。这对我有意义 –
试试这个: self.setUserInfo(user:user !, username:username,name:name,email:email,password:password) – OMK
@Bruno Recillas您的用户对象不是可选的。请尝试更改为用户? –
@OMK我之前尝试过,仍然是相同的错误/: –