Для чего в Swift используется модификатор mutating в структурах?

«Для чего в Swift используется модификатор mutating в структурах?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модификатор 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-типах) этот модификатор не нужен, так как их методы могут изменять свойства по умолчанию.