对成员Swift 3的含糊不清的引用 [英] Ambiguous reference to member Swift 3
问题描述
我正在将项目从Swift 2.3迁移到Swift 3,并且遇到了预期的困难.
I am migrating my project from Swift 2.3 to Swift 3. And having difficulty as expected.
此处是使用 OAuthSwift 的OAuth函数.我试图转换
Here is a function which is being used for OAuth, using OAuthSwift. I have tried to convert
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:parameters:headers:success:failure :)'的引用不明确
Ambiguous reference to member 'authorize(withCallbackURL:scope:state:parameters:headers:success:failure:)'
这是Swift 2的工作代码.
Here is the working code from 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)
}
)
更新:
我键入成功和失败后,错误不会出现.这很好:
Error does not appear unitil I type success and faliure handelrs. This complies fine:
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的类型推断与闭包相结合而引起的. 您可以尝试以下操作之一:
I think the problem is caused by some shortcomings of Swift's type inference in combination with closures. You could try one of the following:
例如,不要使用结尾的闭包
Either don't use trailing closures, e.g.
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)
})
或提供明确的错误类型,例如
or provide an explicit type for error, e.g.
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 3的含糊不清的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!