数组使用 Alamofire 发出请求

Array put request with Alamofire

我正在尝试使用 Alamofire 发出放置请求,我想传递如下内容:

[
   {
    "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()); 

A​​lamofire 强制我将参数设为字典,但我希望参数是一个字典数组。我该怎么做?

谢谢。

好吧,您的参数主体的类型为 [[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)

Alamofire 在 Alamofire 5 中添加了对 Encodable 参数的支持,它提供了对 Array 参数的支持。更新到该版本将允许您直接使用 Array 参数。这种支持在传递 Array 参数时应该是自动的,如果您自定义编码,您只需要确保使用 encoder 而不是 encoding 使用 request 的版本.