2016-09-29 6 views
5

application:openURL:options: app delegateの方法。 このメソッドは、GIDSignInインスタンスのhandleURLメソッドを呼び出す必要があります。 は、認証プロセスの最後にアプリケーションが を受け取るURLを適切に処理します。Googleがメンバー 'subscript'にあいまいに参照しています

firebase guide docsから直接コピーされましたが、まだエラーがあります。

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]) 
} 

答えて

25

あなたはいくつかの問題があります。

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

を、全体の方法は次のようになります:デリゲートメソッドは、スウィフト3で、次のシグネチャを持つ必要があります

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]) 
} 
+0

私はスレッド1を取得: '_'&' open'外部パラメータ名は、アプリケーションを実行すると、Googleのサインインボタン –

+0

をクリックした後、アプリケーションの委任にシグナルSIGABRTエラーがありますか? 'options'に外部パラメータ名がないのはなぜですか? – Honey

+1

@Honeyこれらは、メソッドの呼び出し元が使用する引数ラベルです。 '_ 'は、そのパラメータに名前が与えられていないことを意味します。引数に別のラベル( 'options'など)がない場合は、パラメータ名を引数ラベルとして使用します。これはAppleの「Swift Programming Language」スウィフト3の本ですべてカバーされています。 – rmaddy

0

あなたがサインインGoogleと一緒に複数のURLスキームを使用している場合は、このようにそれを使用します:

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]) 

} 
関連する問題