Swift 问题 - 数组列表中包含二维数组的字典
Posted
技术标签:
【中文标题】Swift 问题 - 数组列表中包含二维数组的字典【英文标题】:Swift Issue - Dictionary with Two-dimensional Array in Array list 【发布时间】:2016-09-02 18:42:38 【问题描述】:我试图找出我的代码有什么问题,因为 XCode 不接受运行此代码。知道它有什么问题吗?
var dictionary = [String: [[String]]]()
var array = [[AnyObject]]()
dictionary["1"] = [["A", "A"], ["A1", "A2"]]
dictionary["2"] = [["B", "B"], ["B1", "B2"]]
dictionary["3"] = [["C", "C"], ["C1", "C2"]]
for i in 1...3
array.appendContentsOf([dictionary["\(i)"]!])
print(array)
这就是我打算这样的输出:
[[["A", "A"], ["A1", "A2"]], [["B", "B"], ["B1", "B2"]], [["C", "C"], ["C1", "C2"]]]
这是我从 Xcode 得到的错误:
发生内部错误。源代码编辑器功能有限。
注意:如果我删除了这一行,最奇怪的部分是:array.appendContentsOf([dictionary["(i)"]!]) 并且它没有错误,但是如果我添加了这一行,那么我得到了来自 Xcode 的错误
【问题讨论】:
错误是什么(发生在哪里)? @Carter 这是我从 XCode 得到的消息:“发生内部错误。源代码编辑器功能受限。” @EricAya 是的,我知道。如果我删除了这一行,最奇怪的部分是:array.appendContentsOf([dictionary["(i)"]!]) 并且它没有错误,但是如果我添加了这一行,那么我会从 Xcode 中得到一个错误。 【参考方案1】:你很亲密!几个变化:
array
需要定义为 [[[String]]]()
而不是 [[AnyObject]]()
。 AnyObject
和 String
不兼容追加。此外,还添加了另一层 []
,因为您的目标是深度为 3 的数组,而不是 2。
将 array.appendContentsOf([dictionary["\(i)"]!])
更改为 array += [dictionary["\(i)"]!]
,因为这在所有版本的 Swift 中都兼容,并防止附加参数被解包。
这提供了正确的答案(在 Swift Playground 中测试):
var dictionary = [String: [[String]]]()
var array = [[[String]]]()
dictionary["1"] = [["A", "A"], ["A1", "A2"]]
dictionary["2"] = [["B", "B"], ["B1", "B2"]]
dictionary["3"] = [["C", "C"], ["C1", "C2"]]
for i in 1...3
array += [dictionary["\(i)"]!]
// console:
// [[["A", "A"], ["A1", "A2"]], [["B", "B"], ["B1", "B2"]], [["C", "C"], ["C1", "C2"]]]
print(array)
【讨论】:
哇,它运行得这么好。我不知道为什么我仍然对 appendContentsOf 有问题。我什至没有考虑过您提供的第二个选项。非常感谢!以上是关于Swift 问题 - 数组列表中包含二维数组的字典的主要内容,如果未能解决你的问题,请参考以下文章
将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)