Ответ
Для того чтобы метод структуры (struct) мог изменять её свойства, необходимо пометить его ключевым словом mutating.
Причина: Структуры в Swift являются value-типами. По умолчанию их методы не могут изменять свойства экземпляра, так как это нарушило бы семантику неизменяемости внутри метода.
Пример:
struct Counter {
private var value = 0
// Этот метод должен быть mutating, так как изменяет свойство `value`
mutating func increment() {
value += 1
}
func getValue() -> Int {
return value
}
}
var myCounter = Counter()
print(myCounter.getValue()) // 0
myCounter.increment() // Без mutating здесь была бы ошибка компиляции
print(myCounter.getValue()) // 1
Важно:
- Ключевое слово
mutatingиспользуется только для структур и перечислений (enum). - Вызов
mutatingметода возможен только для переменных (var), а не для констант (let).