You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase登录回调中User的数据类型是什么?Swift新手技术求助

解决Firebase登录后UserDefaults保存用户信息的参数类型问题

嘿,作为Swift新手遇到这种类型困惑太正常了,我来帮你理清这个问题!

首先,你在Firebase谷歌登录回调里拿到的USER参数,它的类型是**FirebaseAuth.User**(如果你已经在文件顶部导入了import FirebaseAuth,直接写User也可以,Swift会自动识别来自FirebaseAuth模块的这个类型)。

为什么是这个类型?

Firebase Authentication的signIn(with:completion:)方法,它的completion handler的第一个参数就是可选类型的User?——这是Firebase专门用来表示认证用户的模型类,包含了displayName、email、uid这些你需要的基础信息。

修改后的完整代码示例

我帮你把代码调整一下,顺便处理了可选值的问题(避免字典里出现nil导致存储失败):

import FirebaseAuth // 别忘了导入这个框架!

// 登录回调部分
Auth.auth().signIn(with: credential) { (user, error) in
    if let error = error {
        print("failed to create firebase user using google account")
        print("\(error.localizedDescription)")
        return
    }
    // 先解包可选的user对象,避免传nil给保存方法
    guard let loggedInUser = user else {
        print("User object is nil after login")
        return
    }
    print("user successfully logged into firebase")
    saveUserUsingUserDefault(user: loggedInUser)
    self.login()
}

// 保存用户信息的方法
func saveUserUsingUserDefault(_ user: FirebaseAuth.User) {
    // 处理可选值,给默认空字符串避免字典中出现nil
    let basicUserInformation: [String: Any] = [
        "fullname": user.displayName ?? "",
        "email": user.email ?? "",
        "city": ""
    ]
    UserDefaults.standard.set(basicUserInformation, forKey: "basicUserInformation")
    // 安全赋值给全局变量
    if let savedInfo = UserDefaults.standard.object(forKey: "basicUserInformation") as? [String: Any] {
        userInformation = savedInfo
    }
}

额外小提示

  • 回调里的user是可选类型,一定要先解包再传给保存方法,不然会触发编译错误
  • UserDefaults适合存储这种轻量的非敏感信息,如果你要存用户的敏感数据(比如令牌),建议用Keychain而不是UserDefaults
  • 以后再遇到类似的类型困惑,不用跳转到Objective-C定义,按住Option键点击变量,Xcode就会弹出类型提示框,直接就能看到参数类型啦!

内容的提问来源于stack exchange,提问作者Agung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:31:29