Можно ли объявлять методы, изменяющие состояние объектов, в классах на языке Swift?

В Swift методы, которые изменяют состояние объекта, объявляются с ключевым словом mutating, но это касается только структур и перечислений (value types).

Короткий ответ

Что ответить на собеседовании

В Swift методы, которые изменяют состояние объекта, объявляются с ключевым словом mutating, но это касается только структур и перечислений (value types). Для классов (reference types) методы по умолчанию могут изменять свойства экземпляра без дополнительного ключевого слова.

Подробный разбор

Ответ с пояснениями

В Swift методы, которые изменяют состояние объекта, объявляются с ключевым словом mutating, но это касается только структур и перечислений (value types). Для классов (reference types) методы по умолчанию могут изменять свойства экземпляра без дополнительного ключевого слова.

То есть:

  • В классах можно объявлять методы, которые изменяют состояние объекта без mutating.
  • В структурах и перечислениях методы, изменяющие свойства, должны быть помечены как mutating.

Пример класса с изменяющим методом:

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
}

let counter = Counter()
counter.increment()
print(counter.count) // 1

Пример структуры с mutating методом:

struct Counter {
    var count = 0
    mutating func increment() {
        count += 1
    }
}

var counter = Counter()
counter.increment()
print(counter.count) // 1

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее