Cómo obtener el valor del resultado de Alamofire.solicitud().Responder a Json en swift 2?


Tengo una pregunta sobre la nueva versión de Alamofire para Swift 2

Alamofire.request(.POST, urlString, parameters: parameters as? [String : AnyObject])
        .responseJSON { (request, response, result) -> Void in
            let dico = result as? NSDictionary
            for (index, value) in dico! {
                print("index : \(index)     value : \(value)")
            }
    }

En esta sección me gustaría lanzar el resultado a un NSDictionary. Pero Cuando compilo y pongo un punto de interrupción, el depurador dice que dico es nil. Si utilizo debugDescription para imprimir el resultado, no es nil y contiene lo que esperaba ¿Cómo puedo emitir la variable Resultado?

Author: Javier Cadiz, 2015-08-15

2 answers

La respuesta aceptada funciona muy bien, pero con la introducción de Alamofire 3.0.0 hay algunos cambios que afectan esta implementación.
La guía de migración tiene más explicaciones, pero destacaré las relacionadas con la solución real.

  • Respuesta
    Todos los serializadores de respuesta (con la excepción de response) devuelven una estructura de respuesta genérica.

  • Tipo de respuesta
    El tipo de Resultado ha sido rediseñado para ser un tipo genérico doble que no almacena los datos NSData? en el caso .Failure.

También tenga en cuenta que Alamofire trata cualquier solicitud completada para que sea exitosa, independientemente del contenido de la respuesta. Así que necesitas encadenar un .validate() antes de .responseJSON() para golpear el caso .Failure. Lea más al respecto aquí.

Código actualizado:

let url = "http://api.myawesomeapp.com"
Alamofire.request(.GET, url).validate().responseJSON { response in
    switch response.result {
    case .Success(let data):
        let json = JSON(data)
        let name = json["name"].stringValue
        print(name)
    case .Failure(let error):
        print("Request failed with error: \(error)")
    }
}

Para referencia:

  • Xcode 7.3 (Swift 2.2)
  • Alamofire 3.3.1
  • [11]} SwiftyJSON 2.3.3{[19]]}
 53
Author: Javier Cadiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 19:32:38

Si no le importa usar la biblioteca SwiftyJSON, aquí hay un ejemplo de trabajo en Xcode 7 Beta 5 + Alamofire 2.0.0-beta.1 + SwiftyJSON (xcode7 branch)

Alamofire.request(.GET, url, parameters: params, encoding: ParameterEncoding.URL).responseJSON { (_, _, result) in
    switch result {
        case .Success(let data):
            let json = JSON(data)
            let name = json["name"].string
        case .Failure(_, let error):
            print("Request failed with error: \(error)")
    }
}

Editar:

Actualizado SwiftyJSON git page

 37
Author: chemic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-25 11:43:01