包含包含字典的数组的字典?
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<NSObject, Array<NSMutableDictionary>>
。
您当前的尝试将字典值转换为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]] = [:]
后,它现在可以编译了。谢谢你以上是关于包含包含字典的数组的字典?的主要内容,如果未能解决你的问题,请参考以下文章