Swift问题 - 数组列表中带有二维数组的字典

时间:2016-09-02 18:42:38

标签: ios arrays swift multidimensional-array swift-playground

我试图找出我的代码有什么问题,因为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中得到了一个错误

1 个答案:

答案 0 :(得分:0)

你非常接近!一对夫妇改变了:

  1. array需要定义为[[[String]]]()而不是[[AnyObject]]()AnyObjectString与追加不兼容。此外,添加了另一层[],因为您的目标是数组3深,而不是2。
  2. array.appendContentsOf([dictionary["\(i)"]!])更改为array += [dictionary["\(i)"]!],因为它与所有版本的Swift兼容,并保持附加参数不被解包。
  3. 这提供了正确答案(在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)