Swift:使用计算结构 属性 实现 Comparable

Swift: Implementing Comparable with computed struct property

我正在尝试在具有计算的 属性 调用值的结构 Pitch 上实现可比性。计算的 属性 被标记为 'mutating get',因为它需要修改此实例 属性。但是当我尝试扩展以使结构具有可比性时,我在 return 行旁边收到一条错误消息:

不能对不可变值使用变异 getter:'lhs' 是一个 'let' 常数

  extension Pitch: Comparable {
    public static func < (lhs: Pitch, rhs: Pitch) -> Bool {
        return lhs.value < rhs.value
    }

知道如何解决这个问题吗?

主要是因为 Mutating 是改变对象内部变量的值。

lhs & rhs  // Are parameter.

并且参数在 Swift 中是不可变的(常量)。

因此,您可以将这些参数克隆到 var 类型的新对象中,并使用它们的可变 Value

并且因为它们是 Struct 值类型 类型,所以您可以简单地说 var newObj = myOldObj

您的代码可能是这样的。

public static func < (lhs: Pitch, rhs: Pitch) -> Bool {
    var lhsObj = lhs
    var rhsObj = rhs
    return lhsObj.value < rhsObj.value
}