mutating помечает метод, который изменяет self value type; без него компилятор запрещает запись в свойства экземпляра.
Разбор
- У
let-экземпляра нельзя вызвать mutating метод.
- Сеттеры свойств и
mutating — часть модели иммутабельности.
- В
enum тоже бывает mutating (например смена associated value).
- У классов
mutating не нужен — self это ссылка.
Пример
struct Counter {
var value = 0
mutating func inc() { value += 1 }
}
Итог
mutating явно выражает, что метод меняет значение struct/enum.