> Что такое closure и capture list в Swift и как они работают (iOS, Swift)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: Wildberries, Masterdata
Стек: iOS, Swift
> Пример ответа
Замыкание (closure) в Swift - это самодостаточный блок кода, который может захватывать и хранить ссылки на переменные и константы из окружающего контекста. Это аналог блоков в Objective-C или лямбд в других языках.
Как работает захват (capture):
Когда замыкание использует переменную из внешней области видимости, Swift автоматически создает копию этой переменной (для value-типов) или увеличивает счетчик ссылок (для reference-типов). Замыкание "запоминает" эти значения на момент своего создания, даже если исходный контекст уже уничтожен.
Capture list - это синтаксическая конструкция, которая позволяет явно управлять захватом. Она записывается в квадратных скобках перед параметрами замыкания:
SWIFTvar counter = 0let closure = { [counter] inprint(counter)}counter = 10closure() // Выведет 0, а не 10
Зачем нужен capture list:
-
Предотвращение retain cycles - использование
[weak self]или[unowned self]в замыканиях, принадлежащих объекту, чтобы избежать циклических ссылок. -
Явное копирование - захват значения по значению, а не по ссылке (как в примере выше).
-
Изменение семантики - например,
[weak self]делает захваченную ссылку опциональной.
Пример с weak self:
SWIFTclass ViewController {var data: String = "Hello"func setupHandler() {// [weak self] предотвращает retain cyclelet handler = { [weak self] inguard let self = self else { return }print(self.data)}someAsyncOperation(completion: handler)}}
Без capture list замыкание захватило бы self сильно, и если someAsyncOperation хранит замыкание дольше, чем живет ViewController, возникнет утечка памяти.
> Похожие задачи по mobile
В чем отличие между UITableView и UIStackView и можно ли сделать таблицу из UIStackView
Что такое Core Data
Какие процессы вызываются при запуске iOS приложения
Сколько стеков создается в iOS приложении
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью