包含包含字典的数组的字典?

Posted

技术标签:

【中文标题】包含包含字典的数组的字典?【英文标题】:Dictionary containing Arrays containing Dictionaries? 【发布时间】:2014-11-17 00:37:12 【问题描述】:

代码sn-ps:

这是来自一个名为Static的结构:

static var messages: Dictionary = [:]

这是在类函数中:

if Static.messages[sender] == nil //no message history, create array then append
    var messages: [NSMutableDictionary] = [message]
    Static.messages[sender] = messages

else //there is message history, so append
    (Static.messages[sender] as Array).append(message)

错误:

Immutable value of type 'Array<T>' only has mutating members named 'append'

我正在尝试制作一个对话词典,其中每个项目都是一个人。每个数组将是一个消息列表。消息是字典类型。知道为什么我会收到此消息吗?

【问题讨论】:

什么是message?错误在哪一行?您能否发布足够的代码,以便我们将其粘贴在操场上以重现您的问题? 消息是一本字典。错误在线(Static.messages[sender] as Array).append(message)。要重现错误,您将需要访问我的服务器以获取数据以及所有代码。 只需抓取服务器生成的数据并将其硬编码到 Playground 文件中的变量中。你没有发布足够的细节让我帮助你。请发布更多信息,否则您的问题可能会被关闭。至于你为什么会收到这条消息,那只是因为你的语法错误。 【参考方案1】:

如果您对编译器了解您的字典包含的内容,您将不需要使这变得困难的演员表。根据您发布的内容,Static.messages 的实际类型需要类似于Dictionary&lt;NSObject, Array&lt;NSMutableDictionary&gt;&gt;

您当前的尝试将字典值转换为Array,然后尝试追加——这失败了,因为 Swift 将这种转换的结果视为不可变的。您需要做的是简单地使用可选链接:

// instead of:
(Static.messages[sender] as Array).append(message)

// use:
Static.messages[sender]?.append(message)

【讨论】:

我可以添加 static var messages: Dictionary = [:] 是在一个名为 Static 的结构内。 我看到了 - 有没有编译过,或者你被这个错误困住了?您需要在声明 Dictionary 实例时提供键和值类型 - 该行不会按原样工作。 你可以这样声明:static var messages: [NSObject: [NSMutableDictionary]] = [:] 自从我添加了第二个 sn-p 后,它还没有编译。但是,在我将声明更改为 static var messages: [NSObject: [NSMutableDictionary]] = [:] 后,它现在可以编译了。谢谢你

以上是关于包含包含字典的数组的字典?的主要内容,如果未能解决你的问题,请参考以下文章

包含具有重复值的字典的字典组数组

使用 NSPredicate 过滤包含字典的数组数组

检查哪些字典键对应的数组包含某个字符串

在 Swift 中使用 Alamofire 发送包含字典对象数组的字典对象时会发生奇怪的行为?

如何在swift 3中找到数组包含字典的数组索引?

从 Json 数据中分组,其中包含 Swift 4 中的字典数组