6
votes

Alamofire avec Swift 1.2: Utilisation ambiguë de 'ResponseJson'

Je tente d'utiliser Alamofire avec Swift 1.2 en Xcode 6.3. J'ai fixé la plupart des problèmes (c.-à-d. Changer quant à!) Mais j'en ai un que je ne peux pas comprendre.

Le code suivant - et les extraits comme celui-ci - génère une erreur de compilation avec le message "ambigu Utilisation de 'ResponseJson' "à la ligne 5 (" Req.Responsejson () {"). Que dois-je modifier dans la bibliothèque Alamofire ou mon code pour le réparer? Remarque: J'ai importé le projet comme décrit dans la documentation et cela a fonctionné fantastique dans Swift 1.1 et XCode 6.1.1 P>

func theaters(delegate:GlobalNetworkingDelegate){
    if let url = self.mainNetworkingUrl{
        var urlToUse = url + "theaters"
        var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)
            req.responseJSON(){
            (req, response, jsonOut, error) in

            if(response.statusCode == 200 && error == nil){
                var ajson = JSON(jsonOut!)
                delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
            }

        }
    }
}


1 commentaires

Pour une raison quelconque, séparer la fermeture de fuite fixe le problème. Pas certain de pourquoi. N'importe qui?


4 Réponses :


4
votes

séparer la fermeture de fuite dans sa propre variable puis appeler Resonjson (fermeture) fixe le problème, mais je ne sais pas pourquoi. Quelqu'un a une raison? Voici le code de travail:

func theaters(delegate:GlobalNetworkingDelegate){
    if let url = self.mainNetworkingUrl{
        var urlToUse = url + "theaters"

        var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)

        var aClosure = {(req:NSURLRequest, response:NSHTTPURLResponse?, jsonOut:AnyObject?, error:NSError?) -> Void in

            if(response!.statusCode == 200 && error == nil){
                var ajson = JSON(jsonOut!)
                delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
            }

        }

        req.responseJSON(aClosure)


        }
}


0 commentaires

5
votes

J'ai aussi reçu ce qui suit pour travailler: xxx

I.e. En énonçant explicitement le nom du paramètre de la fermeture au lieu de le laisser suivre une piste après la paranthèse de la méthode. Il semble que le nouveau compilateur ait un problème d'identification de la méthode autrement.


0 commentaires

1
votes

Si vous enveloppez la fermeture dans () au lieu de la quitter, cela fonctionne également. Cela fonctionne pour la même raison que les autres réponses ici, juste une autre façon de l'écrire.

func theaters(delegate:GlobalNetworkingDelegate){
if let url = self.mainNetworkingUrl {
    var urlToUse = url + "theaters"
    var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)
        req.responseJSON({
        (req, response, jsonOut, error) in

        if(response.statusCode == 200 && error == nil){
            var ajson = JSON(jsonOut!)
            delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
        }

    })
  }
}


1 commentaires

Résolu le même problème avec alamofire, bizarre ... toute explication logique?



1
votes

J'ai couru dans le même problème. Mise à jour de votre Alamofire vers la dernière version (1.2.2 à mesure que j'ai écrit la réponse) a résolu le problème pour moi.


0 commentaires