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

iOS集成Google登录遇GIDSignIn表达式歧义错误,求解决

解决Google登录集成中的「Type of expression is ambiguous without more context」错误

我按照教程为iOS应用集成Google登录,其余功能正常,但在LoginVM.swift的以下代码行:

GIDSignIn.sharedInstance.signIn(with: config, presenting:ApplicationUtility.rootViewController) {

出现错误提示:Type of expression is ambiguous without more context

完整代码

//
//  LoginVM.swift
//  frcscout
//
//  Created by Elliot Scher on 12/14/22.
//

import Foundation
import Firebase
import GoogleSignIn

class SignUpViewModel: ObservableObject {
    
    @Published var isLogin: Bool = false
    
    func signInWithGoogle() {
                
        guard let clientId = FirebaseApp.app()?.options.clientID else { return }
        
        let config = GIDConfiguration(clientID: clientId)
        
        GIDSignIn.sharedInstance.signIn(with: config, presenting:ApplicationUtility.rootViewController) {
            [self] user, err in
            
            if let error = err {
                print(error.localizedDescription)
                return
            }
            
            guard
                let authentication = user.authentication,
                let idToken = authentication.idToken
            else { return }
            
            let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: authentication.accessToken)
            
            Auth.auth().signIn(with: credential) { result, error in
                if let error = err {
                    print(error.localizedDescription)
                    return
                }
                
                guard let user = result?.user else { return }
                print(user.displayName)
                isLogin.toggle()
            }
                    
        }
        
    }
}

解决方案

  • 确保presenting参数类型匹配
    编译器无法识别ApplicationUtility.rootViewController的类型,signIn方法要求presenting参数为UIViewController类型。如果rootViewController是可选类型,需先解包:

    guard let rootVC = ApplicationUtility.rootViewController else { 
        print("无法获取根视图控制器")
        return 
    }
    GIDSignIn.sharedInstance.signIn(with: config, presenting: rootVC) {
        // 后续闭包代码
    }
    
  • 检查GoogleSignIn SDK版本
    不同版本的SDK方法签名可能存在差异,确认GIDSignIn.sharedInstance.signIn的官方文档,确保参数和回调闭包的格式与当前版本匹配。

  • 修复闭包内变量错误
    在Firebase登录的闭包中,错误地使用了外部的err变量而非当前闭包的error参数,这会导致逻辑错误,需修正:

    Auth.auth().signIn(with: credential) { result, error in
        if let error = error { // 将err改为error
            print(error.localizedDescription)
            return
        }
        // 后续代码
    }
    

内容的提问来源于stack exchange,提问作者user17792511

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:45:31