> Что происходит с копированием при захвате структуры функцией без capture list (iOS, Swift)

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

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

Стек: iOS, Swift

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

При захвате структуры (value type) в замыкание без явного capture list, Swift выполняет копирование структуры в момент создания замыкания. Это происходит потому, что замыкания по умолчанию захватывают переменные как strong references, а для value types это означает создание независимой копии.

Пример:

SWIFT
struct Point {
var x = 0
var y = 0
}
var point = Point(x: 10, y: 20)
let closure = { print(point.x, point.y) } // копия point создаётся здесь
point.x = 100
closure() // выведет "10 20", а не "100 20"

Важные нюансы:

  • Копия создаётся один раз при определении замыкания, а не при его вызове.
  • Если структура содержит ссылочные типы (классы), то копируются только ссылки на них, а не сами объекты.
  • Для изменяемых структур (var) без capture list замыкание не может изменять исходную структуру - работает только с копией.
  • Если нужно захватить структуру по ссылке (избежать копирования), можно использовать capture list с inout параметрами или обернуть структуру в класс/ссылочный тип.

Это поведение гарантирует предсказуемость и безопасность при работе с value types в замыканиях.

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

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