К объектам класса — по ссылке, к объектам структуры — по значению.
Классы (ссылочный тип):
При присваивании экземпляра класса переменной или константе, присваивается ссылка на тот же экземпляр. Изменения, внесенные через одну ссылку, отразятся на всех ссылках, указывающих на этот экземпляр.
swift
Структуры (значимый тип):
При присваивании экземпляра структуры переменной или константе, создается копия этого экземпляра. Каждая переменная/константа содержит свою независимую копию данных. Изменения в одной копии не влияют на другие.
swift
Сравнение:
| Характеристика | Классы | Структуры |
|---|---|---|
| Тип | Ссылочный | Значимый |
| Присваивание | Копируется ссылка | Копируется значение |
| Изменения | Видны на всех ссылках | Влияют только на копию |
| Наследование | Поддерживается | Не поддерживается |
| Идентичность | Можно проверить (triple equals ===) | Нет концепции идентичности |
Выбор между классом и структурой зависит от требований. Структуры часто используются для маленьких, несложных типов данных, представляющих значение (например, Point, Size, Range). Классы используются для более сложных типов данных, требующих ссылочной семантики, наследования или управления жизненным циклом объекта (например, UIViewController, UIView).