> Как изменить значение, захваченное замыканием в Swift (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Яндекс

Стек: iOS, Swift

> Пример ответа

В Swift замыкания захватывают значения по ссылке, если это экземпляр класса, или по значению, если это структура/перечисление. Чтобы изменить захваченное значение, нужно объявить его с var и использовать замыкание с модификатором inout (если требуется изменять внешнюю переменную) или просто изменять захваченную переменную внутри замыкания, если она объявлена как var в контексте захвата.

Пример с изменением значения через захват по ссылке (для классов):

SWIFT
class Counter {
var value = 0
}
let counter = Counter()
let closure = { [counter] in
counter.value += 1
}
closure()
print(counter.value) // 1

Пример с изменением значения через inout (для структур):

SWIFT
func modifyValue(_ value: inout Int) {
let closure = {
value += 1
}
closure()
}
var number = 5
modifyValue(&number)
print(number) // 6

Также можно использовать список захвата с var для копирования значения:

SWIFT
var x = 10
let closure = { [var capturedX = x] in
capturedX += 5
print(capturedX) // 15
}
closure()
print(x) // 10 (оригинал не изменился)

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью