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
相关产品推荐
相关产品推荐

