iOS Google登录错误

10
我正在尝试实现一个Google登录按钮,当我在AppDelegate.swift文件中添加以下行时,我会收到此错误:
无法使用'String'类型的索引对'[String:AnyObject]'的值进行下标。
这段代码有什么问题吗?顺便说一下,这段代码只是从Google页面复制并粘贴而来: https://developers.google.com/identity/sign-in/ios/sign-in?configured&ver=swift
func application(application: UIApplication,
    openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
        return GIDSignIn.sharedInstance().handleURL(url,
            sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey],
            annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

iOS Google Sign In error

谢谢


你确定错误发生在这个点吗?当异常发生时,Xcode突出显示哪一行?如果确实是在这个函数中,options的值是多少? - jcaron
感谢您的回复,jcaron。是的,在我添加了这行代码之后,我很快就得到了这个错误。我已经附上了一张图片,以便更好地参考哪一行被突出显示。此外,Xcode还为这个错误提供了额外的解释:“'subscript'的重载存在这些部分匹配的参数列表:(DictionaryIndex<Key, Value>)、(Key)、(Range<Self.Index>)、(Self.Index)”。 - NewbieWantsToMaster
顺便问一下,我应该如何检查选项的值? - NewbieWantsToMaster
你无法看到选项的值,因为你的代码没有运行。我以为你遇到了运行时错误,而不是编译错误。 - jcaron
警告是“多余的重复参数名称; 'options'已经有一个参数标签”,但即使我删除其中一个“options”,相同的错误仍然存在。 - NewbieWantsToMaster
显示剩余2条评论
2个回答

12

handleURL正在寻找源应用程序和注释的“String”类型参数,但是options提供了“AnyObject”。将这些字典值转换为“String”应该可以解决问题。

尝试以下操作:

更新:Swift 3

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

Swift 2

func application(application: UIApplication,
    openURL url: NSURL, options: [String: AnyObject]) -> Bool {
        return GIDSignIn.sharedInstance().handleURL(url,
            sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
            annotation: options[UIApplicationOpenURLOptionsAnnotationKey] as? String)
}

我也花了很长时间才做完,希望这可以帮到你!


运行得很好。 :) 太棒了。 - dhruvvyas90

8

Xcode 8 Swift 3

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

我想最好加上一些关于这段代码的注释。谢谢。 - YoungHobbit

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