Swift: реализация Comparable с вычисляемым свойством struct - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь реализовать сопоставимый для структуры Pitch, который имеет вычисляемое свойство под названием значение.Вычисляемое свойство помечается как «мутирующее получение», так как оно должно изменить это свойство экземпляра.Но когда я пытаюсь расширить его, чтобы сделать структуру сопоставимой, рядом с обратной строкой появляется ошибка:

Невозможно использовать изменяющий метод get для неизменяемого значения: «lhs» - это «let»константа

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

Есть идеи, как это исправить, пожалуйста?

1 Ответ

0 голосов
/ 28 октября 2018

В основном потому, что 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
}
...