从嵌套结构(带有其他结构的数组)创建字典 Swift
Posted
技术标签:
【中文标题】从嵌套结构(带有其他结构的数组)创建字典 Swift【英文标题】:Create a dictionary from a nested structure (with arrays of other Structures) Swift 【发布时间】:2020-07-23 21:03:46 【问题描述】:我正在使用 Alamofire 的 Post 方法;所以我需要从包含其他模型数组的现有嵌套模型中创建参数 我一直在寻找一种方法,但徒劳无功,请任何人都可以提供帮助!
我是 SWIFT 的初学者,请不要取消我的问题的评级
喜欢这个例子
struct Car: Codable
var id :Int,
var name:String,
var users:[User],
..
var dictionaryRepresentation: [String: Any]
return [
"id" : id,
"name" : name,
"users" : users, XXX WRONG XXX
]
我很难为“用户:[用户]”字段设置正确的格式
struct User: Codable
var id :Int,
var name:String,
var email:String,
..
var dictionaryRepresentation: [String: Any]
return [
"id" : id,
"name" : name,
"email" : email,
]
使用这种错误的格式,我遇到了这个错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__SwiftValue)'
谢谢,
【问题讨论】:
转换为 JSON 的部分在哪里?您对 Codable 的使用表明您将使用 JSONEncoder,那么您执行此操作的代码在哪里? 【参考方案1】:您需要将其map
发送到dictionaryRepresentation
以使其像这样工作:
"users" : users.map $0.dictionaryRepresentation
更好的方法是传递var car: Car
对象,因为它已经符合Codable
Alamafire 为您进行编码,即,您不必将dictionaryRepresentation
作为参数传递在Alamorire
请求中。
【讨论】:
感谢您的回复,但我该如何使用 Alamofire 呢?当我使用 jsonDecoder 时,它给了我一个 Data 类型的变量而不是字典,所以我不能将它用作参数 你是说json编码器吗?如果是这样,您不必使用它,只需传递对象,alamofire 将处理我在帖子中提到的编码。 我试过了,但它给了我这个错误:无法将“汽车”类型的值转换为预期的参数类型“参数?” (又名'可选以上是关于从嵌套结构(带有其他结构的数组)创建字典 Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“defaults write”命令向嵌套数组或字典添加值?
如何将 Azure 流分析中的“类字典”结构转换为带有 javascript UDF 的多维数组?