J'ai un projet de travail dans Xcode 7.3 avec Swift version 2.2. Maintenant, j'ai mis à jour Xcode 8 et migré vers Swift 3. Maintenant, mon projet contient des erreurs spécialement pour les blocs comme le bloc de réussite de l'afnetworking.
Ce qui donne une erreur comme
Cannot convert value of type '() -> ()' to expected argument type '((URLSessionDataTask, Any?) -> Void)?'
Je ne comprends pas comment résoudre ce problème pour fonctionner selon Swift 3.
Et il y a aussi la même erreur dans la connexion Facebook.
Ce qui donne une erreur comme
Cannot convert value of type '(FBSDKLoginManagerLoginResult!, NSError!) -> Void' to expected argument type 'FBSDKLoginManagerRequestTokenHandler!'
et
Cannot convert value of type '(_, _, NSError!) -> Void' to expected argument type 'FBSDKGraphRequestHandler!'
Toutes ces erreurs sont liées aux blocs de gestionnaire dans Swift 3. Je ne comprends pas les erreurs et donc je ne peux pas les résoudre. Toute aide sera appréciée. Merci d'avance.
Bien que je ne connaissais pas l'erreur auparavant, ce que Xcode veut m'informer de l'erreur, mais j'ai supprimé la spécification de type avec l'objet et cela a fonctionné.
Comme
manager.post(methodname, parameters: param, progress: nil, success:{ (dataTask, responseObj) in
if let dict : NSDictionary = responseObj as? NSDictionary {
print("Response of \(methodname) : \(dict)")
if dict.object(forKey: "response") as? String == "success" {
CompletionHandler(true, dict)
} else {
CompletionHandler(false, dict)
}
}
})
Ici, en ce qui concerne l'erreur de question est donnée à dataTask
et responseObj
qui sont de type spécifié. Après avoir retiré le type, cela a bien fonctionné.
Identique à la connexion Facebook
@IBAction func fbLoginClicked(_ sender: AnyObject) {
let app = UIApplication.shared.delegate as! AppDelegate
app.fbLoginManager = FBSDKLoginManager()
app.fbLoginManager.logOut()
app.fbLoginManager.loginBehavior = FBSDKLoginBehavior.native
app.fbLoginManager.logIn(withReadPermissions: ["email"], from: self, handler: { (result, error) -> Void in
if error != nil {
print(error?.localizedDescription)
} else {
if (result! as FBSDKLoginManagerLoginResult).isCancelled == true {
} else {
self.fetchFacebookUserDetail()
}
}
})
}
Ici aussi, j'ai supprimé la spécification de type de result
et error
et le problème a été résolu. Et suivi cela dans toute l'application et cela a fonctionné. Je peux exécuter le projet sans erreur et cela fonctionne également. Merci.