Ответ
Ключевое слово mutating позволяет методу модифицировать свойства value-типа (структуры или перечисления). При вызове такого метода для var экземпляра, создается новая копия структуры с измененными значениями, которая затем заменяет исходный экземпляр.
Пример:
struct Point {
var x: Int
var y: Int
// mutating метод изменяет свойства
mutating func moveBy(x deltaX: Int, y deltaY: Int) {
x += deltaX
y += deltaY
}
}
var point = Point(x: 0, y: 0)
point.moveBy(x: 5, y: 5) // point теперь Point(x: 5, y: 5)
Ключевые аспекты:
- Только для
var: Вызовmutatingметода для экземпляра, объявленного черезlet, вызовет ошибку компиляции. - Семантика value-типа: Изменение происходит через подмену всего экземпляра, что соответствует поведению value-типов.
- Оптимизация (Copy-on-Write): Для сложных структур (например,
Array) Swift использует механизм Copy-on-Write, чтобы избежать излишнего копирования, пока данные не будут реально изменены.