字典不在struct SWIFT中工作

时间:2015-07-31 13:36:55

标签: xcode swift

为什么这不起作用??

struct ChocolateBox {
    var caramelDelight = []
    caramelDelight["flavor"] = "caramel"
}

我在没有结构的情况下尝试了这个,但仍然没有工作:

var caramelDelight = []
caramelDelight["flavor"] = "caramel"

我必须在数组中添加初始值才能使其工作,例如:

var caramelDelight = ["test":"test"]
caramelDelight["flavor"] = "caramel"

请解释。

2 个答案:

答案 0 :(得分:2)

您的var caramelDelight = []不会创建空字典。

要创建空字典,请使用[:]()并指定键和值的类型,例如:var caramelDelight = [String:String]()

还有另一种语法:var caramelDelight: [String:String] = [:]

另外,要修改struct中的var,首先需要创建struct的实例:

struct ChocolateBox {
    var caramelDelight = [String:String]()
}

var cb = ChocolateBox()
cb.caramelDelight["flavor"] = "caramel"

println(cb.caramelDelight)  // [flavor: caramel]

<强>更新

如果需要预填充字典,还可以为结构创建初始值设定项:

struct ChocolateBox {
    var caramelDelight: [String:String]
    init(dict: [String:String]) {
        self.caramelDelight = dict
    }
}

var cb = ChocolateBox(dict: ["flavor": "caramel"])

当然,您可以像往常一样更新字典:

cb.caramelDelight["color"] = "brown"

println(cb.caramelDelight)  // [color: brown, flavor: caramel]

答案 1 :(得分:1)

这是因为caramelDelight实际上是一个数组,而不是字典。你可以通过var caramelDelight: [String:String] = [:]

来解决这个问题