【问题标题】:Array put request with Alamofire使用 Alamofire 的数组放置请求
【发布时间】:2021-01-13 18:56:43
【问题描述】:

我正在尝试使用 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 强制我将参数设为字典,但我希望参数是字典数组。我该怎么做?

谢谢。

【问题讨论】:

标签: ios swift alamofire


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 展示一些代码示例会更好
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2019-05-23
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多