В чем разница между копированием массива и структуры в Swift?

«В чем разница между копированием массива и структуры в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Разница обусловлена семантикой типов: классы (и массивы, если они содержат ссылочные типы) — ссылочные, структуры — значимые.

Ключевые отличия:

  1. Копирование класса/массива (ссылочных типов) передает ссылку на тот же экземпляр в памяти.
  2. Копирование структуры создает новую, независимую копию данных.

Пример:

// Класс (ссылочный тип)
class MyClass { var value = 10 }
let obj1 = MyClass()
let obj2 = obj1          // Копируется ссылка
obj2.value = 20
print(obj1.value)        // 20 — изменение затронуло оба "объекта"

// Структура (значимый тип)
struct MyStruct { var value = 10 }
var struct1 = MyStruct()
var struct2 = struct1    // Создается полная копия данных
struct2.value = 20
print(struct1.value)     // 10 — исходная структура не изменилась

Важно: Массивы в Swift (например, Array<Int>) сами являются структурами и используют механизм copy-on-write для оптимизации: реальное копирование происходит только при изменении.