Ошибка входа в Google для iOS

Я пытаюсь реализовать кнопку входа в Google, когда я добавляю следующие строки в свой файл AppDelegate.swift, я получаю эту ошибку:

Не удается подписать значение типа «[String : AnyObject]» индексом типа «String»

Есть идеи, что не так с этим кодом? Кстати, этот код просто скопирован и вставлен со страницы 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])
}

«Ошибка

Спасибо


person NewbieWantsToMaster    schedule 06.12.2015    source источник
comment
Вы уверены, что ошибка происходит в этот момент? Какая строка выделяется Xcode при возникновении исключения? Если он действительно есть в этой функции, каково значение options?   -  person jcaron    schedule 07.12.2015
comment
jcaron спасибо за ответ. Да, после того, как я добавил строку, я легко получил эту ошибку. Я прикрепил изображение, чтобы лучше видеть, какая строка выделена. Кроме того, xcode дает дополнительное объяснение ошибки: существуют перегрузки для «подстрочного индекса» с этими частично совпадающими списками параметров: (DictionaryIndex‹Key, Value›), (Key), (Range‹Self.Index›), (Self. Показатель)   -  person NewbieWantsToMaster    schedule 07.12.2015
comment
Кстати, как мне проверить значение опций?   -  person NewbieWantsToMaster    schedule 07.12.2015
comment
Какое предупреждение о параметрах 2 строки выше? Кроме того, вы захотите исправить другие предупреждения (у вас есть 12 предупреждений в вашем проекте).   -  person jcaron    schedule 07.12.2015
comment
Вы не можете видеть значение параметров, так как ваш код не работает. Я думал, что у вас ошибка времени выполнения, а не ошибка компиляции.   -  person jcaron    schedule 07.12.2015
comment
Предупреждение: Постороннее повторяющееся имя параметра; «Параметры» уже имеют метку аргумента, но даже после удаления одного из параметров та же ошибка остается   -  person NewbieWantsToMaster    schedule 07.12.2015
comment
Я больше сторонник Objective-C, чем Swift, поэтому я не знаком с деталями синтаксиса, но после быстрого теста простое удаление одного из двух вариантов, похоже, решает проблему.   -  person jcaron    schedule 07.12.2015


Ответы (2)


handleURL ищет аргументы типа «String» для sourceApplication и аннотации, но 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)
}

Свифт 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)
}

Это тоже заняло у меня целую вечность. Надеюсь, это поможет!

person lonesomewhistle    schedule 08.12.2015
comment
Работал как шарм. :) Потрясающий. - person dhruvvyas90; 17.03.2016

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])
}
person pickaxe    schedule 15.09.2016
comment
Я думаю, было бы лучше добавить некоторое примечание о том, что делает этот код. Спасибо. - person YoungHobbit; 15.09.2016