我刚刚在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
以下是迁移指南的链接,进一步解释了这一点:https://firebase.google.com/docs/reference/ios/naming-migration-guide
请注意,代码已更新,因此截至编辑当天未发出任何错误
答案 0 :(得分:7)
新的Firebase版本在大多数类型上删除了FIR
前缀,因此现在FIRUser
被称为User
。您的应用中是否已经有User
结构或类?如果是,您需要更改setUserInfo
来电中的参数,接受Firebase.User
(通知否!
),而不是User!
。
然后,当您调用它时,您可以使用if let
,guard let
抓取它,或在传递时用user!
强行打开它。
如果情况不是这样,请告诉我,我可以尝试进一步提供帮助!
修改:包含指向所有必要更改的Firebase 4 Swift Migration Guide链接。
答案 1 :(得分:1)
在firebase完成处理程序中,User对象是可选的,但在您的方法中,您需要非可选的User对象。您可以修复它:
// 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)
}
}
答案 2 :(得分:1)
鉴于收到的错误为零,您在完成版块中收到 用户 。所以基本上检索的用户的类型是可选的。
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)
}