web-dev-qa-db-fra.com

erreur du gestionnaire d'achèvement dans Swift 3 et Xcode 8

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.

Snapshot for error in afnetworking post method

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.

Facebook Login error

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.

18
Max

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.

13
Max