如何创建一个字典数组?

时间:2015-02-09 12:48:29

标签: arrays swift dictionary struct

编程新手!

我正在尝试在Swift中的结构中创建一个字典数组,如下所示:

var dictionaryA = [
    "a": "1",
    "b": "2",
    "c": "3",
    ]
var dictionaryB = [
    "a": "4",
    "b": "5",
    "c": "6",
    ]
var myArray = [[ : ]]
myArray.append(dictionaryA)
myArray.append(dictionaryB)

这在游乐场中运行良好,但是当我将它放入Xcode项目中时,在struct中,带有append函数的行会产生错误“Expected declaration”。

我也尝试使用+ =运算符,结果相同。

如何在struct中成功构造这个数组?

4 个答案:

答案 0 :(得分:10)

根据您的错误Expected declaration,我假设您这样做:

struct Foo {
    var dictionaryA = [
        "a": "1",
        "b": "2",
        "c": "3",
    ]
    var dictionaryB = [
        "a": "4",
        "b": "5",
        "c": "6",
    ]
    var myArray = [[ : ]]
    myArray.append(dictionaryA) // < [!] Expected declaration
    myArray.append(dictionaryB)
}

这是因为you can place only "declarations" in the struct bodymyArray.append(dictionaryA)不是声明。

您应该在其他地方执行此操作,例如在初始化程序中。以下代码编译。

struct Foo {
    var dictionaryA = [
        "a": "1",
        "b": "2",
        "c": "3",
    ]
    var dictionaryB = [
        "a": "4",
        "b": "5",
        "c": "6",
    ]
    var myArray = [[ : ]]

    init() {
        myArray.append(dictionaryA)
        myArray.append(dictionaryB)
    }
}

但是正如@AirspeedVelocity所提到的那样,你应该提供更多关于myArray的信息,或myArray Array<NSDictionary>我认为你不期望的信息。

无论如何,正确的解决方案会因您真正想做的事情而有所不同:

也许或许没有,你想要的是:

struct Foo {
    static var dictionaryA = [
        "a": "1",
        "b": "2",
        "c": "3",
    ]
    static var dictionaryB = [
        "a": "4",
        "b": "5",
        "c": "6",
    ]

    var myArray = [dictionaryA, dictionaryB]
}

但是,我不知道,为什么不这样做:

struct Foo {

    var myArray = [
        [
            "a": "1",
            "b": "2",
            "c": "3",
        ],
        [
            "a": "4",
            "b": "5",
            "c": "6",
        ]
    ]
}

答案 1 :(得分:6)

问题出在这一行:

var myArray = [[ : ]]

你需要告诉Swift myArray是什么类型 - [[:]]信息不足。

您可以采用明确的方式:

var myArray: [[String:String]] = [[ : ]]

或者,如果可行的话,隐含地使用您计划放入的第一个或两个值:

var myArray = [dictionaryA]
var myArray = [dictionaryA,dictionaryB]

(作为显式空版本的替代,您还可以编写var myArray = [[String:String]](),这是var myArray = Array<Dictionary<String,String>>()的简写

答案 2 :(得分:2)

var arrayOfDict = [[String: Int]]()
// Create a dictionary and add it to the array.
var dict1: [String: Int] = ["age": 20]
arrayOfDict.append(dict1)
// Create another dictionary.
var dict2: [String: Int] = ["rank": 5].
arrayOfDict.append(dict2)
// Get value from dictionary in array element 0.
if let value = arrayOfDict[0]["age"] {
print(value)
}

输出

20

答案 3 :(得分:0)

或者您可以使用更简单的元组数组,如下所示:

var myArray:[(a:String,b:String,c:String)] = []

并追加以后需要的任何元素:

self.myArray.append((a:"A",b:"B",c:"c"))

并且只使用它们:

self.myArray[index].a
self.myArray[index].b
self.myArray[index].c