CompletionHandler return nil

Bonjour à tous,

J’essaye de récupérer des données distantes avec Alamofire. En soit, la récupération fonctionne mais le passage de données n’a pas l’air de faire son boulot …

J’ai donc :

ViewController.swift

let _customerManager = CustomerManager()
        _customerManager.getCustomers() { requestResponse, requestError in
            
            print("ResponseObject : \(String(describing: requestResponse)); Error : \(String(describing: requestError))")
        }

CustomerManager.swift

func getCustomers(completionHandler: @escaping (NSDictionary?, Error?) ->()) {
        let apiManager = APIManager()
        apiManager.call(method: HTTPMethod.get, request: "/customers?", parameters: nil, completionHandler: completionHandler)
    }

Et enfin APIManager.swift

func call(method:HTTPMethod, request:String, parameters:Parameters?, completionHandler: @escaping (NSDictionary?, Error?) -> ()) {
        let url = setRequest(request: request)
        
        Alamofire.request(url, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: APIManager.Constants.headers)
            .validate()
            .responseJSON { response in
                switch response.result {
                case .success (let value):
                    print(".success")
                    print("Value : \(value)")
                    completionHandler(value as? NSDictionary, nil)
                case .failure (let error):
                    print(".failure")
                    completionHandler(nil, error)
                }
        }
    }

Dans les print de l’APIManager, j’ai bien “.success” et la réponse JSON attendue dans value.
Par contre, dans mon viewController.swift, la réponse comme l’erreur sont à nil.

ResponseObject : nil; Error : nil

Vous auriez une idée ou une piste ?

Merci :slight_smile:

Bon j’ai trouvé la solution, mais je ne suis pas sur de la comprendre.
J’ai remplacé tous les “NSDictionary” par “AnyObject” et ça fonctionne.

Quelqu’un pourrait m’expliquer pourquoi ce c’est pas un Dictionnaire qui ressort de la requête ?

Merci :slight_smile:

Salut,

Tu as essayé un truc genre Dictionary<String,Any> ?

Attendons la voix des Sages :slight_smile:

1 « J'aime »

Salut,

A mon avis si le résultat est nill c’est que la reponse recuprer n’est pas un NSdictionnay, donc du coup je te conseil de tester avant de l’envoyer dans le completionHandler. A mon avis si ce n’est pas un NSdictionnary c’est que c’est surrement un NSArray dans lequel il y’a des NSDictionnary. Après si tu n’est pas sur du contenue du JSON effectivement metre AnyObject est la solution car on peu tous “fourer” dedans, celà permet de le parser plus loin.

1 « J'aime »

+1 pour la liste de dict (array)

2 « J'aime »

Bien vu @Samir !

Je vais tester ce soir, effectivement je n’avais pas pensé à l’Array qui pourrait être au dessus du Dictionary :wink:

1 « J'aime »

Bien joué @Samir, c’était bien ça !

:thumbsup:

Merci

1 « J'aime »