【问题标题】:swift4: "cannot use mutating member on immutable value: 'self' is immutable" in mutating functionswift4:“不能在不可变值上使用变异成员:'self'是不可变的”在变异函数中
【发布时间】:2018-05-04 14:51:52
【问题描述】:

这段代码

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

处理错误

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

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

【问题讨论】:

    标签: swift


    【解决方案1】:

    RangeReplaceableCollection 是集合的协议 如果您可以添加或删除元素,则符合:

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

    【讨论】:

      【解决方案2】:

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

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

      这是一个必要的约束,我认为它也遵循open-closed principle

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        相关资源
        最近更新 更多