2016-02-24 4 views
3

« Невозможно подстроить значение типа [String, AnyObject] с индексом типа String' for options[UIApplicationOpenURLOptionsSourceApplicationKey]. Swift 2, iOS 9.x, Google Вход, установленный с использованием CocoaPods. Любые намеки?Вход в систему для iOS: ошибка «Невозможно подстроить значение типа» [String: AnyObject] 'с индексом типа «String» «

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

ответ

7

функция before iOS 9.0

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

или с помощью метода, который вы используете, вы можете использовать его как (Prior to iOS 9.0 and above)

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

или для поддержки как в iOS 9 and above и в iOS 8.0 to iOS 9.0

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

//for iOS 8, check availability 
@available(iOS, introduced=8.0, deprecated=9.0) 
func application(application: UIApplication,openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation) 
} 
+0

Я использую оба метод: применение: OpenUrl: варианты: и применение: OpenUrl: sourceApplication: аннотации: который устаревшее согласно Руководству для разработчиков Google. Поэтому я не уверен, что я должен принять это как решение. –

+0

проверить мое редактирование @DukeAce –

3

я обнаружил, что нужно использовать эту версию недавно (т.е. Swift 3.х). Надеюсь, это поможет другим с подобной ошибкой компиляции.

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

Его работающая идеальная скорость 3.0 – Saranjith

0

Swift 4 совместимого ответ на El Captain v2.0:

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

//for iOS 8, check availability 
@available(iOS, introduced: 8.0, deprecated: 9.0) 
func application(_ application: UIApplication,open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 
    return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: sourceApplication!, annotation: annotation) 
} 
Смежные вопросы