mutatingВ Swift структуры — это value types, и их свойства по умолчанию неизменяемы. Если метод должен модифицировать какое-либо хранимое свойство, он должен быть помечен ключевым словом mutating.
mutating func increment() {
count += 1
}
Это ключевое слово сигнализирует компилятору, что self может быть изменён внутри метода, что заставляет Swift создать новую копию структуры с обновлёнными значениями.
mutating на константном (let) экземпляре — разрешены только переменные (var) экземплярыmutating нельзя использовать в протоколах, которые принимают только классы, так как классы — это reference types и не нуждаются в этом ключевом словеmutating внутри class, только внутри struct или enumstruct Counter {
var count = 0
mutating func increment() {
count += 1
}
}
var mutableCounter = Counter()
mutableCounter.increment() // ✅ Работает
let fixedCounter = Counter()
fixedCounter.increment() // ❌ Ошибка: нельзя изменять 'let' константу
Ключевое слово mutating явно объявляет намерение модифицировать состояние структуры, сохраняя семантику value types в Swift безопасной и предсказуемой.
Ты можешь помечать методы как mutating внутри структур и перечислений, но не внутри классов.
Новый — ещё не проверен сообществом
Вы