Actualizado recientemente a Alamofire 4 y ejecuta en algunas cuestiones. Preguntándose cómo codificar la url de la petición de parámetro a JSON en Alamofire Router. Aquí está el ejemplo de que yo era el siguiente en Alamofire 3.

enum UserRouter: URLRequestConvertible {
  static let baseURLString = "http://jsonplaceholder.typicode.com/"

  case Get(Int)
  case Create([String: AnyObject])
  case Delete(Int)

  var URLRequest: NSMutableURLRequest {
    var method: Alamofire.Method {
      switch self {
      case .Get:
        return .GET
      case .Create:
        return .POST

      }
    }

    let params: ([String: AnyObject]?) = {
      switch self {
      case .Get:
        return (nil)
      case .Create(let newPost):
        return (newPost)
      }
    }()

    let url:NSURL = {
      let relativePath:String?
      switch self {
      case .Get(let postNumber):
        relativePath = "posts/\(postNumber)"
      case .Create:
        relativePath = "posts"
      }

      var URL = NSURL(string: PostRouter.baseURLString)!
      if let relativePath = relativePath {
        URL = URL.URLByAppendingPathComponent(relativePath)
      }
      return URL
    }()

    let URLRequest = NSMutableURLRequest(URL: url)

    let encoding = Alamofire.ParameterEncoding.JSON
    let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)

    encodedRequest.HTTPMethod = method.rawValue

    return encodedRequest
  }
}

Parece que ahora en Alamofire 4 esto ha cambiado.

let encoding = Alamofire.ParameterEncoding.JSON
let (encodedRequest, _) = encoding.encode(URLRequest, parameters: params)

Aquí es lo que estoy tratando con Alamofire 4 Router, pero no funciona como se espera.

func asURLRequest() throws -> URLRequest {
        let url = try UserRouter.baseURLString.asURL()

        var urlRequest = URLRequest(url: url.appendingPathComponent(path))
        urlRequest.httpMethod = method.rawValue


        switch self {
            case .updateDeviceToken(_,let device):
                urlRequest =  try ParameterEncoding.encode(urlRequest as URLRequestConvertible, with: device)
                //urlRequest = try  JSONEncoding.default.encode(urlRequest, with: device)
            case .addUser(_, let user):
                urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
            case .updateUser(_,_,let user):
                urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
            case .lockUser(_,_,let user):
                urlRequest = try URLEncoding.default.encode(urlRequest, with: user)
            default:
                break
        }
        return urlRequest

OriginalEl autor user2498258 | 2016-10-05

1 Comentario

  1. 17

    Puedo usar esta sintaxis de codificación:

    ...
    method: .get,
    parameters: parameters,
    encoding: JSONEncoding.default,
    headers: nil,
    ...

    En su caso, podría ser como esta:

    let encoding = Alamofire.JSONEncoding.default

    Yo estaba luchando con este problema, hasta que me encontré con un ejemplo sencillo aquí:

    https://github.com/Alamofire/Alamofire#json-encoding

    En realidad he intentado eso, pero no prestó atención a que el error estaba recibiendo en xcode. Parece que mi dispositivo objeto de diccionario fue mal formado debido a la nula en el notificationToken clave. [«notificationToken»: opcional(nil), «deviceId»: «6f61f29e-c01b-4010-b587-74b2a0bdf96b»]

    OriginalEl autor pedrouan

Dejar respuesta

Please enter your comment!
Please enter your name here