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 - 如何发送一系列无钥匙对象的主要内容,如果未能解决你的问题,请参考以下文章