iOS使用Firebase Auth展示用户信息出现Optional及设置显示名问题
问题解决方法
1. 去掉字符串中的Optional标识
Auth.auth().currentUser?.email、displayName这类属性都是Swift可选类型(Optional),未经过解包直接做字符串插值时,就会自动带上Optional(xxx)的格式标识,两种常用解决方法如下:
- 方法1:可选绑定安全解包,适合需要针对无值场景做不同逻辑处理的情况
修改后的displayinfo函数示例:
func displayinfo() { guard let user = Auth.auth().currentUser else { // 未登录状态的处理逻辑,比如跳转到登录页 return } // 解包邮箱 if let email = user.email { EmailLabel.text = "Email: \(email)" } else { EmailLabel.text = "Email: 未绑定" } // 解包显示名 if let displayName = user.displayName { UsernameLabel.text = displayName } else { UsernameLabel.text = "未设置用户名" } // 其他属性处理同理 if let photoURL = user.photoURL { // 加载头像的逻辑 } }
- 方法2:空合运算符
??设置默认值,代码更简洁
// 直接赋值时如果属性为nil,就显示??后面的默认内容 EmailLabel.text = "Email: \(user.email ?? "未绑定邮箱")" UsernameLabel.text = user.displayName ?? "未设置用户名"
2. 为Firebase用户配置显示名
Firebase Auth的用户Profile属性支持自定义displayName和photoURL,通过createProfileChangeRequest方法即可更新:
2.1 新用户注册时设置显示名示例
Auth.auth().createUser(withEmail: email, password: password) { [weak self] authResult, error in guard let user = authResult?.user, error == nil else { print("注册失败: \(error?.localizedDescription ?? "")") return } // 创建Profile更新请求 let changeRequest = user.createProfileChangeRequest() changeRequest.displayName = "你要设置的用户名" // 也可以同时设置头像地址 // changeRequest.photoURL = URL(string: "头像链接地址") // 提交更新请求 changeRequest.commitChanges { error in if let error = error { print("用户名设置失败: \(error.localizedDescription)") return } // 更新成功,刷新UI self?.displayinfo() } }
2.2 已登录用户更新显示名示例
guard let user = Auth.auth().currentUser else { return } let changeRequest = user.createProfileChangeRequest() changeRequest.displayName = "新的用户名" changeRequest.commitChanges { [weak self] error in if let error = error { print("更新失败: \(error.localizedDescription)") return } // 更新完成后刷新当前页面显示 self?.displayinfo() }
内容的提问来源于stack exchange,提问作者Kiran Lim
相关产品推荐
相关产品推荐

