不能分配给财产:' self'是不可改变的,我知道如何解决但需要理解

时间:2018-03-13 10:05:55

标签: swift

我有struct

public struct MyStruct {
  public var myInt: Int = 0
  ...
}

我的扩展名为MyStruct

extension MyStruct {

  public func updateValue(newValue: Int) {
     // ERROR: Cannot assigned to property: 'self' is immutable
     self.MyInt = newValue
  }
}

我收到上面显示的错误,我知道我可以通过多种方式解决错误,例如:在mutating之前添加func关键字。

我在这里不是问如何解决错误,而是问为什么swift不允许这种价值分配?除了修复之外我还需要一个解释。

3 个答案:

答案 0 :(得分:4)

struct 值类型。对于值类型,只有明确标记为变异的方法才能修改 self的属性,因此这在计算属性中是不可能的。

如果您将 struct 更改为,那么您的代码会毫无问题地编译。

结构是值类型,这意味着它们在传递时被复制。因此,如果您更改副本,则只更改该副本,而不是原始副本,而不是可能存在的任何其他副本。如果您的结构是不可变的,那么通过值传递产生的所有自动副本都是相同的。如果要更改它,则必须通过使用修改后的数据创建结构的新实例来有意识地执行此操作。 (不是副本)

答案 1 :(得分:0)

因为Struct是一个值类型,因此应该是不可变的

答案 2 :(得分:-1)

extension MyStruct {

    public func updateValue(newValue: Int) {

      var newMyInt=myInt
      newMyInt = newValue
    }
}

这将起作用。