如何从Firebase获取手机号?Swift代码赋值类型不匹配问题求助
问题解答
一、修复currentUser赋值错误
你碰到的这个错误很明确:Firebase.Auth是Firebase认证模块的类本身,但你的CreateProfileVC的currentUser属性需要的是User类型的实例——也就是当前已经完成认证的用户对象。
直接修改代码就行,正确的写法是获取Firebase中当前已登录的用户实例,而不是引用Auth类本身:
private func showCreateProfileVC() { // 先安全获取当前已登录的用户,避免空值问题 guard let currentUser = Auth.auth().currentUser else { // 这里可以处理用户未登录的场景,比如跳转登录页或弹出提示 print("用户还没登录哦") return } let storyboard = UIStoryboard(name: "Main", bundle: nil) let dvc = storyboard.instantiateViewController(withIdentifier: "CreateProfileVC") as! CreateProfileVC dvc.currentUser = currentUser // 现在赋值的是正确的User实例 self.present(dvc, animated: true) }
简单解释下:
Auth.auth()会获取Firebase认证的单例对象currentUser是这个单例的属性,返回当前已完成认证的User实例(如果存在的话),用guard let解包能避免后续出现空指针问题。
二、从Firebase获取用户手机号
要拿到用户的手机号,前提是用户已经通过手机号认证,或者后续把手机号关联到了自己的Firebase账号上。具体操作步骤如下:
- 先获取当前已认证的用户实例(和上面代码里的
currentUser一致) - 访问用户对象的
phoneNumber属性——注意这个属性是可选类型(String?),因为不是所有用户都会绑定手机号。
示例代码:
if let currentUser = Auth.auth().currentUser { if let userPhoneNumber = currentUser.phoneNumber { print("用户手机号:\(userPhoneNumber)") } else { print("这个用户还没绑定手机号") } } else { print("用户还没登录,没法获取手机号") }
额外注意点:
- 如果用户是通过邮箱、Google账号等其他方式登录的,且没有主动绑定手机号,
phoneNumber会返回nil - 要确保你的Firebase项目已经开启了手机号认证功能,并且用户完成了手机号验证的流程,否则也拿不到手机号
内容的提问来源于stack exchange,提问作者Евгений
相关产品推荐
相关产品推荐

