swift4:"不能在不可变值上使用变异成员:' self'是不可变的"在变异功能

时间:2018-05-04 14:51:52

标签: swift

此代码

extension Collection {
  mutating func f() {
    removeFirst()
  }
}

处理错误

cannot use mutating member on immutable value: 'self' is immutable

我认为变异关键字应该使自己变成自我。可变的。为什么呢?

2 个答案:

答案 0 :(得分:0)

RangeReplaceableCollection是集合的协议 如果你可以添加或删除元素,请遵守:

extension RangeReplaceableCollection {
    mutating func f() {
        self.removeFirst()
    }
}

答案 1 :(得分:0)

  

我认为mutating关键字应该使'self'可变。为什么呢?

如果您可以通过执行您尝试的操作简单地将现有协议或类从不可变更改为可变,那么如果类无法信任自己的状态,则几乎不可能以高效且设计良好的方式编写框架或其属性的值。

这是一个必要的约束,它也遵循我所看到的open-closed principle