Middle
118
questionbank

Расскажи о capture list в Swift.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Capture list в Swift используется для явного управления захватом переменных замыканиями (closures). Это позволяет избежать сильных циклов ссылок, особенно при работе с self в замыканиях, которые используются внутри классов. Основные типы захвата: weak и unowned.

Тип захватаОписаниеКогда использовать
weakЗахватывает переменную как опционал, не увеличивая счетчик ссылок. Её значение может стать nil.Когда объект замыкания может пережить захватываемый объект.
unownedЗахватывает переменную без увеличения счетчика ссылок, но считается, что захватываемый объект будет жив, пока существует замыкание. Не опционал.Когда объект замыкания и захватываемый объект имеют одинаковое время жизни, и захватываемый объект не будет nil до завершения замыкания.

Синтаксис capture list:

swift

Пример использования weak self:

swift

Пример использования unowned self:

swift

Захватывать можно не только self, но и любые другие переменные, доступные в замыкании. Например, чтобы сохранить значение переменной на момент создания замыкания:

swift