Ответ
Изменяется текущий экземпляр. Ключевое слово mutating в Swift для методов структур (типов-значений) дает функции право изменить свойства этого экземпляра. При вызове mutating метода для var переменной не создается новая копия.
Как это работает? Компилятор неявно передает экземпляр структуры в mutating метод как inout параметр. Это означает, что функция работает с оригинальной переменной, переданной по ссылке, а не с ее копией.
Пример и объяснение:
struct Point {
var x: Int, y: Int
// Этот метод модифицирует self
mutating func moveBy(x deltaX: Int, y deltaY: Int) {
x += deltaX // Прямое изменение свойства текущего экземпляра
y += deltaY
}
}
var myPoint = Point(x: 10, y: 20)
myPoint.moveBy(x: 5, y: -5) // Вызов mutating метода
print(myPoint) // Point(x: 15, y: 15) - изменился исходный `myPoint`
Важные нюансы:
mutatingметоды можно вызывать только для переменных (var), но не для констант (let).- Для классов (ссылочных типов)
mutatingне требуется, так как методы всегда могут изменить свойства объекта, на который ссылается переменная. - Если внутри
mutatingметода присвоить новый экземпляр свойствуself, это полностью заменит текущий экземпляр:self = Point(x: 0, y: 0).