Ответ
Модификатор mutating позволяет методам структуры (или перечисления) изменять её собственные свойства. Поскольку структуры в Swift являются value-типами, их методы по умолчанию не могут изменять self. mutating явно указывает компилятору, что метод будет модифицировать экземпляр.
Пример:
struct Point {
var x = 0.0
var y = 0.0
mutating func moveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var point = Point(x: 1.0, y: 1.0)
point.moveBy(x: 2.0, y: 3.0) // Теперь point.x = 3.0, point.y = 4.0
Ключевые моменты:
- Метод с
mutatingможет быть вызван только для переменного (var) экземпляра структуры. - Внутри
mutatingметода вы можете присваивать значение полностью новомуself(например,self = Point(x: 10, y: 20)). - В классах (reference-типах) этот модификатор не нужен, так как их методы могут изменять свойства по умолчанию.