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]]()AnyObjectString 不兼容追加。此外,还添加了另一层 [],因为您的目标是深度为 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)

在 Swift 3 中包含字典的 Firebase 进程子快照

在 Swift 的异步调用中包含返回处理程序

二维数组多维数组

如何在字典中包含类中的实例列表? [复制]

如何在 CURLOPT_POSTFIELDS 中包含数组数据? [复制]