Какое ключевое слово позволяет методу изменять свойства структуры в Swift?

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

Ответ

Для того чтобы метод структуры (struct) мог изменять её свойства, необходимо пометить его ключевым словом mutating.

Причина: Структуры в Swift являются value-типами. По умолчанию их методы не могут изменять свойства экземпляра, так как это нарушило бы семантику неизменяемости внутри метода.

Пример:

struct Counter {
    private var value = 0

    // Этот метод должен быть mutating, так как изменяет свойство `value`
    mutating func increment() {
        value += 1
    }

    func getValue() -> Int {
        return value
    }
}

var myCounter = Counter()
print(myCounter.getValue()) // 0
myCounter.increment()       // Без mutating здесь была бы ошибка компиляции
print(myCounter.getValue()) // 1

Важно:

  • Ключевое слово mutating используется только для структур и перечислений (enum).
  • Вызов mutating метода возможен только для переменных (var), а не для констант (let).