プロジェクトを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
}
よろしくお願いします。
この問題は、クロージャーと組み合わせた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)
}
同じエラーが発生しましたメンバーへのあいまいな参照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)
}
})
参考:この種類のエラーは、同じ名前の変数/メソッドが複数ある場合に表示されますが、oauthswift
には「authorize」と呼ばれる「もの」が複数ありますか?別の方法のような?私のエラーは私が宣言したことでした:
let fileManager = FileManager()
そして
let _ = try localFileManager.createDirectory(...)
localFileManager
の変数名を変更すると同じエラーが発生し、修正されました。