【发布时间】:2020-04-03 03:07:43
【问题描述】:
我正在尝试发出 Alamofire Post 请求,但我的 Codable 结构失败了。
var items: [[InspectionUploadItem]?]?
let params : Parameters = ["key" : key, "items": items]
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.prettyPrinted, headers: headers).validate().responseJSON { response in
我简化了参数,但我的 items 结构失败了。
struct InspectionUploadItem: Codable {
var id: Int = 0
var type: String = ""
var value: String?
var name: String = ""
var children: [[InspectionUploadItem]]?
private enum CodingKeys: String, CodingKey {
case id = "id"
case type = "type"
case value = "value"
case children = "children"
}
}
模型是正确的,因为我已经在 Android 中成功完成了这个。我避免手动将其转换为 JSON 对象,因为该对象可以扩展三个子级别并包含数十个项目。
这是我的具体错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__SwiftValue)'
我发现标题相似的帖子指出了非结构模型上更明显的错误。有没有办法让我专门缩小错误的位置?我的代码有更明显的问题吗?
编辑:输出参数字段
["key": "keyString", "items": Optional([Optional([CompanyName.InspectionUploadItem(id: 317, type: "TEXT", value: Optional("testing field"), name: "One String", children: nil)])])]
【问题讨论】:
-
发布您收到的正文
-
这是一个 post 方法,除非你指的是我的输出参数。我只是在上面添加了它们。我的 nil "children" 是否有问题,或者数组被写为 "optional"
-
“可选”是问题所在。尝试删除它!
-
@Zyfe3r 就是这样。虽然我的“值”字段需要是一个可选值,所以我将手动构建我的项目以进行上传,而不是尝试处理传递这个已完成的对象。谢谢!