【问题标题】:Alamofire 4 URL Request parameter encoding to JSONAlamofire 4 URL请求参数编码为JSON
【发布时间】:2017-02-13 12:01:51
【问题描述】:

最近升级到 Alamofire 4 并遇到了一些问题。想知道如何在 Alamofire 路由器中将 url 请求参数编码为 JSON。这是我在 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
  }
}

现在似乎在 Alamofire 4 中这已经改变了。

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

这是我正在尝试使用 Alamofire 4 路由器,但没有按预期工作。

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

【问题讨论】:

    标签: ios json swift alamofire


    【解决方案1】:

    我使用这种编码语法:

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

    在你的情况下,它可能是这样的:

    let encoding = Alamofire.JSONEncoding.default
    

    我也一直在努力解决这个问题,直到我在这里找到了一个简单的例子:

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

    【讨论】:

    • 其实我试过了,但没有注意我在xcode中遇到的错误。由于 notificationToken 键中的 nil ,我的设备字典对象的格式似乎很糟糕。 [“notificationToken”:可选(nil),“deviceId”:“6f61f29e-c01b-4010-b587-74b2a0bdf96b”]
    猜你喜欢
    • 2016-02-23
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多