首页 > 解决方案 > 使用 Alamofire 的数组放置请求

问题描述

我正在尝试向 Alamofire 发出 put 请求,并且我想传递如下内容:

[
   {
    "id" : 1,
    "position": 0
   },
   {
    "id" : 2,
    "position": 1
   },
   {
    "id" : 6,
    "position": 2
   }
]

通常,要使用 alamofire 提出请求,我会这样做:

request = Alamofire
                .request(
                    url,
                    method: method,
                    parameters: parameters,
                    encoding: encoding,
                    headers: buildHeaders()); 

Alamofire 强迫我将参数制作成字典,但我希望参数是字典数组。我怎样才能做到这一点?

谢谢。

标签: iosswiftalamofire

解决方案


好吧,您的参数主体的类型为 [[String: Any]],或者如果您使用 Alamofire [Parameters]。

所以如果你解析一些对象数组来创建这个参数数组。你可以这样做:

var positionedArray = [[String : Any]]()
        for (index, item) in dataArray.enumerated() {
            guard let id = item.id else {
                return
            }
            let singleParameters : [String: Any] = ["id": id, "position" : index]
            sorted.append(singleParameters)
        }

因此,您可以根据您的请求使用此正文(参数)。此外,您应该使用 JSONSerialization:

例如,如果您使用自定义的 Alamofire 客户端,只需使用扩展名:

let data = try JSONSerialization.data(withJSONObject: parameters, options: JSONSerialization.WritingOptions.prettyPrinted)
                let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
                request.httpBody = json!.data(using: String.Encoding.utf8.rawValue)
                var finalRequest = try URLEncoding.default.encode(request, with: nil)

推荐阅读