> Как изменить значение, захваченное замыканием в Swift (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Яндекс
Стек: iOS, Swift
> Пример ответа
В Swift замыкания захватывают значения по ссылке, если это экземпляр класса, или по значению, если это структура/перечисление. Чтобы изменить захваченное значение, нужно объявить его с var и использовать замыкание с модификатором inout (если требуется изменять внешнюю переменную) или просто изменять захваченную переменную внутри замыкания, если она объявлена как var в контексте захвата.
Пример с изменением значения через захват по ссылке (для классов):
SWIFTclass Counter {var value = 0}let counter = Counter()let closure = { [counter] incounter.value += 1}closure()print(counter.value) // 1
Пример с изменением значения через inout (для структур):
SWIFTfunc modifyValue(_ value: inout Int) {let closure = {value += 1}closure()}var number = 5modifyValue(&number)print(number) // 6
Также можно использовать список захвата с var для копирования значения:
SWIFTvar x = 10let closure = { [var capturedX = x] incapturedX += 5print(capturedX) // 15}closure()print(x) // 10 (оригинал не изменился)
Важно помнить: если замыкание изменяет захваченную переменную, она должна быть объявлена как var, иначе компилятор выдаст ошибку.
> Похожие задачи по mobile
Пробовали ли верстать под iPad и iPhone одновременно
Какую ссылку лучше делать слабой в цикле сильных ссылок и почему
Поддерживает ли ARC в Swift потокобезопасность счетчика ссылок
Что делает механизм ARC на этапе компиляции
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью