Firebase登录设置报错:条件绑定初始化器需可选类型而非String
Firebase登录Swift代码错误解决方案
错误原因分析
初始错误:
Initializer for conditional binding must have Optional type, not 'String'
你的代码里user.accessToken本身是非可选的GIDToken类型,所以user.accessToken?.tokenString里的可选链运算符?完全多余。此时tokenString返回非可选String,而guard let要求右侧必须是可选值,因此触发错误。移除
?后的错误:Cannot use optional chaining on non-optional value of type 'GIDToken'
因为user.accessToken是非可选类型,不能对非可选值使用可选链?.,必须用普通属性访问符.。
正确代码实现
根据GIDToken的tokenString属性是否为可选类型,分两种情况处理:
情况1:tokenString是非可选String
直接将accessToken的赋值移出guard条件,改为普通赋值:
guard let user = result?.user, let idToken = user.idToken?.tokenString else { print("Error retrieving tokens") return } let accessToken = user.accessToken.tokenString
情况2:tokenString是可选String
去掉accessToken后的?,直接用.访问属性,同时保留guard let进行条件绑定:
guard let user = result?.user, let idToken = user.idToken?.tokenString, let accessToken = user.accessToken.tokenString else { print("Error retrieving tokens") return }
补充说明
user.idToken是可选类型,所以可以用?.tokenString进行可选链访问;而user.accessToken是非可选类型,必须直接用.访问其属性。
内容的提问来源于stack exchange,提问作者Ayaan Grover
相关产品推荐
相关产品推荐

