2016-02-17 2 views
6

Ho utilizzato Alamofire in uno dei miei progetti iOS, ma di recente durante l'aggiornamento ad Alamofire 3.0 il formato è leggermente cambiato per la restituzione dei risultati. Nel mio caso, desidero chiamare un'API di accesso e restituire il risultato. Ci sono un paio di errori che potrebbero accadere, quindi restituisco sempre il risultato dell'API quale sia il problema, quindi vorrei che il mio codice vada in un blocco di errore se la risposta è un 400 e quindi includo il messaggio dalla mia API come parte dell'errore, ma non riesco a sembrare così ottenere i dati di risposta dalla richiesta quando il risultato è un fallimento.Ottenere i dati di risposta da Alamofire errore

Ecco il mio codice:

Alamofire.request(
     method, 
     Constants.baseURL + route, 
     parameters: fullParameters) 
     .validate() 
     .responseJSON { response in 
      let json = JSON(response.result.value!) 
      switch response.result { 
      case .Success: 
       completion?(json["data"]) 
      case .Failure(let errorData): 
       failure?(errorData, json["errmsg"]) 
      } 
    } 

Quello che sta accadendo in questo, è che quando la risposta è un fallimento, si rompe a causa response.result.value è pari a zero, ma vorrei che fosse il JSON restituito dall'API, non importa cosa. Quando la risposta è un successo, d'altra parte funziona perfettamente.

risposta

2

Poiché si sta chiamando validate() Alamofire sta convalidando automaticamente il codice di stato da 200...299.

Se non si vuole Alamofire per convalidare il tuo codice di stato, ma si desidera farlo da soli manualmente avete due opzioni:

  • Rimuovere .validate() e gestire tutto manualmente.
  • Modificare validate() a .validate(statusCode: yourRange) per l'intervallo che si desidera consentire e gestirli manualmente.

Ulteriori informazioni here.

+0

Questo lo ha risolto, grazie mille! :) – Henry