Ответ
Разница обусловлена семантикой типов: классы (и массивы, если они содержат ссылочные типы) — ссылочные, структуры — значимые.
Ключевые отличия:
- Копирование класса/массива (ссылочных типов) передает ссылку на тот же экземпляр в памяти.
- Копирование структуры создает новую, независимую копию данных.
Пример:
// Класс (ссылочный тип)
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 для оптимизации: реальное копирование происходит только при изменении.