不能在不可变值上使用变异成员:'XXX'是'let'常量

时间:2016-10-29 09:55:56

标签: swift

我是swift的新手。我正在尝试多种方式但是当我尝试建议错误时我失败了然后发生了另一个错误。到底发生了什么,我不知道

  public struct ThermometerStruct {
          var temperature: Double = 0.0
      public mutating func registerTemperature(temperature: Double) {
        self.temperature = temperature
      }
    }

    let thermometerStruct = ThermometerStruct()
    thermometerStruct.registerTemperature(temperature : 56.0)
  

第14行的错误,第5栏:不能在不可变值上使用变异成员:'thermometerStruct'是'let'常量       thermometerStruct.registerTemperature(温度:56.0)       ^ ~~~~~~~~~~~~~~~~   
  
  第13行,第5栏的信息:将'let'更改为'var'以使其变为可变       let thermometerStruct = ThermometerStruct()       ^ ~~       VAR

2 个答案:

答案 0 :(得分:2)

错误消息已经告诉您,您需要更改什么。将let替换为var

struct s值类型。这意味着,如果修改struct的任何属性,则需要将实例声明为var

当您的struct有一个方法,即修改结构的某个属性时,此方法为mutablemutable方法只能在您声明为var的实例上调用。

答案 1 :(得分:2)

如果您在 lazy 中使用 struct var 并且将其传递给函数或具有对象的 let 引用,请访问 {{1} } 对对象隐式 lazy var

所以你需要用它制作一个 mutating

var

...

struct Test {
  lazy var a: String = ""
}