从嵌套结构(带有其他结构的数组)创建字典 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 将处理我在帖子中提到的编码。 我试过了,但它给了我这个错误:无法将“汽车”类型的值转换为预期的参数类型“参数?” (又名'可选>') 如果您仍然遇到问题,请添加另一篇关于此的帖子,将尝试找出您哪里出错了。 好吧,我在你的回答的帮助下解决了这个问题,但我只是想知道一种更有效的使用 Alamofire 的方法(因为我不知道)

以上是关于从嵌套结构(带有其他结构的数组)创建字典 Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“defaults write”命令向嵌套数组或字典添加值?

来自嵌套字典数组 Xcode 的数组

具有数组和字典混合的横向展平雪管数据

如何将 Azure 流分析中的“类字典”结构转换为带有 javascript UDF 的多维数组?

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

将结构嵌套到 iCloud