【发布时间】: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
这段代码
extension Collection {
mutating func f() {
removeFirst()
}
}
处理错误
cannot use mutating member on immutable value: 'self' is immutable
我认为 mutating 关键字应该使 'self' 可变。为什么?
【问题讨论】:
标签: swift
RangeReplaceableCollection 是集合的协议
如果您可以添加或删除元素,则符合:
extension RangeReplaceableCollection {
mutating func f() {
self.removeFirst()
}
}
【讨论】:
我认为 mutating 关键字应该使 'self' 可变。为什么?
如果您可以通过做您尝试做的事情来简单地将现有协议或类从不可变更改为可变,那么如果类不能信任自己的状态,那么几乎不可能以高效且设计良好的方式编写框架或其属性的值。
这是一个必要的约束,我认为它也遵循open-closed principle。
【讨论】: