2017-08-01 204 views
1

我剛剛升級了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我之前嘗試過,仍然是相同的錯誤/: –

回答

4

新的火力地堡的版本,所以現在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

1

在火力完成處理的一天的用戶對象是可選但在你的方法中,你期望的是非可選的用戶對象。你能解決這個問題,如:

// 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

我得到以下內容:'不能將值類型「用戶?」轉換爲期望的參數類型「用戶」# –

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

我不明白爲什麼它會在你的答案後給出錯誤。這對我有意義 –

相關問題