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
相关产品推荐
相关产品推荐

