Alamofire - 如何发送一系列无钥匙对象

Posted

技术标签:

【中文标题】Alamofire - 如何发送一系列无钥匙对象【英文标题】:Alamofire - how to send an array of keyless objects 【发布时间】:2021-09-15 18:26:40 【问题描述】:

我正在尝试发送如下所示的 API 请求

[
  
    "thing": "",
  ,
]

基于这样的对象数组

struct Something: Codable 
  var thing: String? = nil


[Something]

AF.request(path, method: .put, parameters: params, encoding: JSONEncoding.default, headers: headers)

很明显,Alamofire 无法做到这一点,并希望对象是像这样的字典 [String, Any]

[
  "parentThing": 
    "thing": "",
  ,
]

这不是一个选项。我找到了一些可能的解决方案,但在这种情况下都没有。

任何帮助将不胜感激!

对于我发现并尝试过的事情的详尽清单, https://***.com/a/44551842/1386556 或 https://***.com/a/27027253/1386556 - 这些导致每个模型都被转换为这样的字符串。显然,字符串数组不是意图。它确实需要是一个 JSONObjects 数组。

["\"thing\":\"\","]

【问题讨论】:

“我找到了一些可能的解决方案”:理论上,解决方案是自己创建 URLRequest,给它自己的 JSON(使用 JSONSerialization、URLQueryItem 等)并将 URLRequest 传递给阿拉莫菲尔。你试过什么 @Larme 我编辑了帖子并开始输入我尝试过的东西。当我尝试更多时,我会将它们包括在内。 未测试,但这应该可以解决问题:pastebin.com/x7Ugx3tR 这就是链接答案的作用... 无法转换“数据”类型的值?到预期的参数类型“参数?” 哪一行会导致该错误?在您的情况下,标题类型是什么?手动操作? 【参考方案1】:

不要使用request(..., encoding:) 版本,而是将参数设置为Encodable 并使用request(..., encoder: JSONParameterEncoder()) 版本,它可以正确支持编码的值数组。

【讨论】:

该项目目前正在使用旧功能来执行对大约 50 个端点的请求。我按照你所说的做了,在线,但仍然无法弄清楚它为什么会失败。响应“成功”但服务器端失败并返回失败。事实证明,它没有将 json 响应序列化回日志中并找到一个功能齐全的示例项目相当困难。此外,重要的是,这样做会带来更多问题,例如从 AFError 解码自定义错误 json 响应,该响应也缺乏任何文档。我是一名 8 岁的 android 开发人员,上周在 ios 中工作:/ 如果你debugPrint(response)你在闭包中得到的响应,它应该会给你响应的大部分相关细节。【参考方案2】:

像这样发送数据 [[String: AnyObject]]

示例:

func preparaeData() -> [[String: AnyObject]] 
    var data: [[String: AnyObject]] = [[String: AnyObject]]()
    
    for (item) in yourArray 
      let dataDictionary: [String: AnyObject] = ["thing": item.thing as AnyObject]
      data.append(dataDictionary)
    
    
    return data
  

【讨论】:

[[String: AnyObject]] 对我有用。我需要至少发送 [[String?: AnyObject]] 但最好是 [[AnyObject]]。请注意,我在数组中的对象没有键。对象内部是一个标准字典,但我需要发送一组无键字典或更好的措辞作为简单的 json 对象而不是字典。

以上是关于Alamofire - 如何发送一系列无钥匙对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 将单个对象作为参数发送

如何使用Alamofire将单个对象作为参数发送

使用 Alamofire 将对象作为参数发送

在 Alamofire 中 Swift 发送参数

RHCE 系列:如何使用无客户端配置 Postfix

Alamofire 不允许直接发送对象