Google登录引用成员“subscript”的含义不明确。

5

application:openURL:options: 方法是应用程序代理的一种方法。该方法应该调用 GIDSignIn 实例的 handleURL 方法,该方法将正确处理您的应用程序在认证过程结束时接收到的 URL。

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url as URL!, sourceApplication: 
        options[UIApplicationOpenURLOptionsSourceApplicationKey]  //Error is here
        //Ambiguous reference to member 'subscript' error is shown.

        as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
2个回答

25

你有一些问题。在Swift 3中,委托方法应该具有以下签名:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool

整个方法如下所示:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}

在运行应用程序并点击Google登录按钮后,我在App Delegate中收到Thread 1:Signal SIGABRT错误。 - Manish Ojha
“_”和“open”是外部参数名吗?为什么“options”没有外部参数名? - mfaani
1
@Honey 这些是方法调用者使用的参数标签。下划线 _ 表示该参数没有提供名称。如果参数没有单独的标签(比如 options),那么你可以使用参数名作为参数标签。这些内容都在苹果公司的《The Swift Programming Language》Swift 3版书籍中有详细介绍。 - rmaddy
@rmandy Firebase本身不是发布了Google登录功能吗?我已经将所有代码转换为Swift 3,但Google登录按钮仍然无法工作。 - Manish Ojha
我建议您发布一个新问题,因为您正在处理一个新问题。请确保提供相关代码和有关崩溃的完整详细信息。 - rmaddy

0
如果您正在使用多个URL方案以及Google登录,请按照以下方式使用它:
func application(application: UIApplication,
                 openURL url: NSURL,
                 options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    return GIDSignIn.sharedInstance().handle(url as URL!,
                                             sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,
                                             annotation: options[UIApplicationOpenURLOptionsKey.annotation])

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接