Swift:使用计算的struct属性实现Comparable

时间:2018-10-28 11:28:46

标签: swift computed-properties

我正在尝试在结构Pitch上实现可比性,该结构具有名为value的计算属性。计算出的属性被标记为“变异获取”,因为它需要修改此实例属性。但是,当我尝试扩展以使结构可比时,在返回行旁出现错误:

不能在不可变值上使用变异getter:“ lhs”是“ let”常量

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

请问如何解决此问题?

1 个答案:

答案 0 :(得分:3)

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

var

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

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

由于它们的类型为var newObj = myOldObj值类型,因此您可以简单地说出public static func < (lhs: Pitch, rhs: Pitch) -> Bool { var lhsObj = lhs var rhsObj = rhs return lhsObj.value < rhsObj.value }

您的代码可能是这样的。

s1