无法转换值类型“用户?”预期的参数类型“用户!”

问题描述:

我刚刚升级了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

注意,代码已更新,没有错误给出此编辑

+0

试试这个: self.setUserInfo(user:user !, username:username,name:name,email:email,password:password) – OMK

+0

@Bruno Recillas您的用户对象不是可选的。请尝试更改为用户? –

+0

@OMK我之前尝试过,仍然是相同的错误/: –

新的火力地堡的版本,所以现在FIRUser被称为User掉在大多数类型的FIR前缀。您的应用中是否已有User结构或类?如果是这样,您需要更改setUserInfo呼叫中的参数应接受Firebase.User(通知号!),而不是User!

然后,当你调用它,你可以用if letguard let或力展开它user!抓住它,当你经过入。

让我知道这是不是这样,我可以尝试进一步帮助!

编辑:包含指向Firebase 4 Swift Migration Guide的链接,该链接解释了所有必要的更改。

+0

我明白你的意思。 reddit上的其他人向我发送了https://firebase.google.com/docs/reference/ios/naming-migration-guide的链接,这些链接稍微解释了一下。谢谢您的帮助! –

+0

很高兴它工作:) – 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) 
    } 
} 
+0

当我添加'!'时,它会返回以下内容:'不能将值类型“User”转换为期望的参数类型“User!”# –

+0

@BrunoRecillas:您可以检查更新后的代码吗? –

+0

我得到以下内容:'不能将值类型“用户?”转换为期望的参数类型“用户”# –

您收到用户在完成块鉴于收到错误为零。所以基本上用户的类型是可选的。

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) 
} 
+0

试过了。它给了我下面的内容:'不能将值类型“User?”转换为期望的参数类型“User?”' –

+0

我不明白为什么它会在你的答案后给出错误。这对我有意义 –