web-dev-qa-db-ja.com

メンバーへのあいまいな参照Swift 3

プロジェクトをSwift 2.3からSwift 3.に移行しています。予想どおりに問題が発生しています。

OAuthSwift を使用して、OAuthに使用されている関数を次に示します。私は変換しようとしました

class func OAuthSwiftAuthorization(inViewController viewController: UIViewController, withOAuthInfo info:FitnessTracker, successHandler:@escaping MyOAuthNewSuccessHandler, failure: @escaping ((_ error: NSError) -> Void)) {

    let oauthswift = OAuth2Swift(
        consumerKey:    info.consumerKey,
        consumerSecret: info.consumerSecret,
        authorizeUrl:   info.authorizeUrl,
        accessTokenUrl: info.accessTokenUrl,
        responseType:   info.responseType
    )

    oauthswift.authorizeURLHandler = SafariURLHandler(viewController: viewController, oauthSwift: oauthswift)
    oauthswift.accessTokenBasicAuthentification = true
    oauthswift.allowMissingStateCheck = true

    oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in

             successHandler(credential, response, parameters)
    }) { (error) in

        failure(error: error)
        print(error.localizedDescription)
    }
}

しかし、私はでエラーが発生しています

oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in

エラー状態

メンバー 'authorize(withCallbackURL:scope:state:states:headers:success:failure :)'へのあいまいな参照

Swift 2。

    oauthswift.authorizeWithCallbackURL(
        URL(string: info.callBackUrl)!,
        scope: info.scope, state:info.state,
        success: { credential, response, parameters in

            successHandler(credientials: credential, response: response, params: parameters)
        },
        failure: { error in

            failure(error: error)
            print(error.localizedDescription)
        }
    )

UPDATE:

エラーは、私がタイプ成功と失敗ハンドラを入力するように表示されません。これは問題ありません:

        oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
        // successHandler(credential, response, parameters)
    }) { (erorr) in
        // failure(error: error
    }

よろしくお願いします。

10
Umair Afzal

この問題は、クロージャーと組み合わせたSwiftの型推論のいくつかの欠点が原因だと思います。次のいずれかを試すことができます。

末尾のクロージャーを使用しないでください。

oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in

         successHandler(credential, response, parameters)
}, failure: { (error) in

    failure(error: error)
    print(error.localizedDescription)
})

または、エラーの明示的なタイプを提供します。

 oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in

         successHandler(credential, response, parameters)
 }) { (error: Error) in

     failure(error: error)
     print(error.localizedDescription)
 }
12
Andreas Oetjen

同じエラーが発生しましたメンバーへのあいまいな参照Swift 4からSwift 5に変換する同じ方法で)ハンドラーは、新しいResultタイプをサポートするように変更されました。完了ハンドラーを以下に変更すると、問題が修正され、

        oauthVarSwift.authorize( withCallbackURL: URL(string: "")!,
                             scope: "", state:"", completionHandler: {  result in
                                switch result {
                                case .success(let credential, let response,  let parameters):
                                    print(credential.oauthToken)

                                case .failure(let error):
                                 print(error)
                                }

          })
1
yaali

参考:この種類のエラーは、同じ名前の変数/メソッドが複数ある場合に表示されますが、oauthswiftには「authorize」と呼ばれる「もの」が複数ありますか?別の方法のような?私のエラーは私が宣言したことでした:

let fileManager = FileManager()

そして

let _ = try localFileManager.createDirectory(...) 

localFileManagerの変数名を変更すると同じエラーが発生し、修正されました。

1
Kappe