Swift:不能为struct的字典成员添加值

时间:2014-09-19 02:52:21

标签: dictionary struct swift

我无法将值添加到作为结构成员的字典中。例如,这个:

struct S {
  var d = [String:Int]()

  func f() {
    d["Hello"] = 0
  }
}

导致此错误:

'@lvalue $T6' is not identical to '(String, Int)'

struct更改为class,或将d的声明移至功能范围可消除错误。

我想这是一个错误,但我不知道。这有什么逻辑我不明白吗?

2 个答案:

答案 0 :(得分:4)

您需要使用mutating关键字标记该方法,以表明它确实修改了结构

mutating func f() {
  d["Hello"] = 0
}

来自doc

  

从实例方法中修改值类型

     

结构和枚举是值类型。默认情况下   无法在其实例中修改值类型的属性   方法

     

但是,如果您需要修改结构的属性或   在特定方法中枚举,您可以选择进行变异   该方法的行为。然后该方法可以变异(即更改)   它在方法中的属性,以及它所做的任何更改   当方法结束时,将写回原始结构。该   方法还可以为其隐式self指定一个全新的实例   属性,这个新实例将替换现有的实例   方法结束。

     

您可以通过之前放置变异关键字来选择此行为   该方法的func关键字:

答案 1 :(得分:1)

是否需要对结构进行变异?

Struct S {
  var d = [String:Int]()

  mutating func f() {
    d["Hello"] = 0
  }

我在移动设备上,所以如果它不起作用请告诉我,我会给出答案。