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
}
我正在尝试在具有计算的 属性 调用值的结构 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
}