Capture list в Swift используется для явного управления захватом переменных замыканиями (closures). Это позволяет избежать сильных циклов ссылок, особенно при работе с self в замыканиях, которые используются внутри классов. Основные типы захвата: weak и unowned.
| Тип захвата | Описание | Когда использовать |
|---|---|---|
weak | Захватывает переменную как опционал, не увеличивая счетчик ссылок. Её значение может стать nil. | Когда объект замыкания может пережить захватываемый объект. |
unowned | Захватывает переменную без увеличения счетчика ссылок, но считается, что захватываемый объект будет жив, пока существует замыкание. Не опционал. | Когда объект замыкания и захватываемый объект имеют одинаковое время жизни, и захватываемый объект не будет nil до завершения замыкания. |
Синтаксис capture list:
swift
Пример использования weak self:
swift
Пример использования unowned self:
swift
Захватывать можно не только self, но и любые другие переменные, доступные в замыкании. Например, чтобы сохранить значение переменной на момент создания замыкания:
swift