Tengo una pregunta acerca de 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 en un NSDictionary. Pero Cuando voy a compilar y poner un punto de interrupción, el depurador se dice que las parejas de hecho es nil. Si yo uso debugDescription para imprimir el resultado, no es nil y contiene lo que yo esperaba
Cómo puedo emitir el Resultado de la variable?

  • Trate de if let dico = result as? [String: AnyObject] { ... }
  • Si no se ejecuta, es porque el resultado fue nulo (o no downcastable a un diccionario). Usted debe comprobar para ver lo que está en error.
  • También, vale la pena destacar que los diccionarios tienen las llaves, no hay índices.
  • Gracias @mattt por tu respuesta. He de encontrar la manera de hacerlo. Yo uso lo que has dicho pero no funciona, y cuando lo hago: si vamos a dico = resultado.valor como? [String: AnyObject] {} y justo «reemplazar» resultado por el resultado.»el valor es el trabajo,

2 Comentarios

  1. 56

    La aceptó responder a las grandes obras, pero con la introducción de Alamofire 3.0.0 hay algunos cambios importantes que afecta a esta aplicación.

    El guía de migración de tiene más explicaciones pero voy a destacar las relativas a la solución real.

    • Respuesta

      Toda respuesta serializadores (con la excepción de respuesta) devuelven un genérico de Respuesta de la estructura.

    • El tipo de respuesta

      El tipo de Resultado ha sido rediseñada para ser un doble de tipo genérico que no almacena la NSData? en el .Failure caso.

    También tomar en cuenta que Alamofire trata cualquier solicitud para ser exitoso, sin importar el contenido de la respuesta. Por lo que necesita para una cadena de .validate() antes de .responseJSON() para golpear la .Failure caso.
    Leer más sobre esto 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)")
        }
    }

    De referencia:

    • Xcode 7.3 (Swift 2.2)
    • Alamofire 3.3.1
    • SwiftyJSON 2.3.3
    • Gracias por este. Funciona!!
    • Alamofire no choque con el .Caso de falla a menos que la cadena .validar() antes .responseJSON{}, por lo que se tratará a todas las solicitudes completadas como .El éxito, incluso si el código de estado HTTP que no está en el rango de 200: github.com/Alamofire/Alamofire#validation
    • Gracias @ChrisTrevarthen, no se nota eso. Respuesta actualizada con su aclaración.
    • En Alamofire 4.0 de datos, ahora es ‘Ninguna’. ¿Cómo se maneja eso?
    • esto funcionó para mí, incluso en Alamofire 4.0 y promisekit
    • ¿Cómo se puede entonces analizar el objeto de error?
    • parece que con Alamofire 4.0 puede acceder a response.result.isSuccess o response.result.isFailure lugar.
    • Exactamente lo que estaba buscando. El uso de .validate() para golpear .failure(let error) caso.

  2. 38

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

    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)")
        }
    }

    Edición:

    Actualizado SwiftyJSON git página

    • El SwifyJSON enlace está roto 🙁

Dejar respuesta

Please enter your comment!
Please enter your name here