Je migre mon projet de Swift 2.3 à Swift 3. Et rencontre des difficultés comme prévu.
Voici une fonction utilisée pour OAuth en utilisant OAuthSwift . J'ai essayé de convertir
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)
}
}
Mais je reçois une erreur à
oauthswift.authorize(withCallbackURL: URL(string: info.callBackUrl)!, scope: info.scope, state: info.state, success: { (credential, response, parameters) in
États d'erreur
Référence ambiguë au membre 'authorize (withCallbackURL: scope: state: parameters: en-têtes: success: failure :)
Voici le code de travail de 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)
}
)
METTRE À JOUR:
Une erreur ne semble pas apparaître lorsque je tape succès et succès. Cela se conforme bien:
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
}
Alors s'il vous plaît guidez-moi Merci.
Je pense que le problème est causé par certaines lacunes de l'inférence de type de Swift associée à des fermetures ... Vous pouvez essayer l'une des solutions suivantes:
N'utilisez pas les fermetures de fin, par exemple.
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)
})
ou fournissez un type explicite pour l'erreur, par ex.
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)
}
Pour référence: Ce type d'erreur apparaît lorsqu'il y a plus d'une variable/méthode portant le même nom, votre oauthswift
a-t-il plus d'une "chose" appelée "autoriser"? comme une autre méthode? Mon erreur a été que j'ai déclaré:
let fileManager = FileManager()
et en
let _ = try localFileManager.createDirectory(...)
J'ai eu la même erreur, changer le nom de la variable dans localFileManager
l'a corrigé.