You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:15:15