Google SignIn报错:表达式类型模糊/找不到user变量的解决求助
修复方案
1. 解决「Type of expression is ambiguous without more context」错误
这个错误是Swift无法自动推断闭包参数类型导致的,只需显式声明signIn完成闭包中user和err的具体类型即可:
将闭包开头的{[self] user, err in}修改为:
{[self] user: GIDGoogleUser?, err: Error? in
注:若你使用的Google Sign-In SDK版本较旧,用户类型可能是GIDUser,请根据实际SDK版本调整
2. 解决「Cannot find 'user' in scope」错误
这个问题通常是你声明参数类型时写错了变量名或类型名导致的。比如误将参数名user改成其他名称,或者类型名拼写错误,都会导致后续代码找不到user变量。只要保证闭包参数名和后续代码中使用的名称一致,同时类型声明正确,就能解决该问题。
完整修复后的代码
GIDSignIn.sharedInstance.signIn(with: config, presenting: getRootViewController()) {[self] user: GIDGoogleUser?, err: Error? in if let error = err { isLoading = false print(error.localizedDescription) return } guard let authentication = user?.authentication, let idToken = authentication.idToken else { isLoading = false return } let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: authentication.accessToken) // firebase auth Auth.auth().signIn(with: credential) { result, err in isLoading = false if let error = err { print(error.localizedDescription) return } // displaying user name guard let user = result?.user else { return } print(user.displayName ?? "Success!") // update user as logged in withAnimation { log_Status = true } } }
额外注意事项
- 确保已正确导入所需模块:
import GoogleSignIn import FirebaseAuth - 确认
getRootViewController()函数返回的是合法的UIViewController实例,该函数的实现也可能影响类型推断。
内容的提问来源于stack exchange,提问作者Ayman.1302
相关产品推荐
相关产品推荐

