Swift 问题 - 数组列表中包含二维数组的字典

Swift Issue - Dictionary with Two-dimensional Array in Array list

我想弄清楚我的代码有什么问题,因为 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 得到的错误:

An internal error occurred. Source editor functionality is limited.

注意:最奇怪的部分是,如果我删除了这一行:array.appendContentsOf([dictionary["(i)"]!]) 它没有错误,但是如果我添加了这一行行然后我从 Xcode

得到一个错误

你们非常亲密!几个变化:

  1. array 需要定义为 [[[String]]]() 而不是 [[AnyObject]]()AnyObjectString 不兼容追加。此外,还添加了另一层 [],因为您的目标是深度为 3 的数组,而不是 2。
  2. array.appendContentsOf([dictionary["\(i)"]!]) 更改为 array += [dictionary["\(i)"]!],因为这在 Swift 的所有版本中都兼容,并且不会展开附加​​参数。

这提供了正确答案(在 Swift 游乐场测试):

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)