Назад к вопросам
Junior
77
questionbank
В чем отличие между ссылочными типами и типами значения в Swift?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Типы значения (Value Types) хранят данные напрямую, и при присваивании или передаче создается их копия. Изменения в копии не влияют на оригинал. Примеры: struct, enum, tuple.
Ссылочные типы (Reference Types) хранят ссылку на одно и то же место в памяти. При присваивании или передаче копируется только ссылка. Изменения через одну ссылку видны через другую, так как обе указывают на один объект. Примеры: class, func, closure.
| Характеристика | Тип значения | Ссылочный тип |
|---|---|---|
| Хранение данных | Напрямую | Ссылка на данные в памяти |
| Присваивание/Передача | Копирование данных | Копирование ссылки |
| Изменение | Изменяется только копия | Изменяется оригинальный объект через любую ссылку |
| Классы для создания | struct, enum, tuple |
class |
| Управление памятью | Автоматическое (стек, для мелких) | Ручное (ARC - Automatic Reference Counting) |
Пример:
// Тип значения
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Создается копия p1
p2.x = 10
print(p1.x) // Вывод: 1 (оригинал не изменился)
print(p2.x) // Вывод: 10
// Ссылочный тип
class Rectangle {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
}
}
var r1 = Rectangle(width: 20, height: 30)
var r2 = r1 // Копируется ссылка, r2 и r1 указывают на один объект
r2.width = 50
print(r1.width) // Вывод: 50 (оригинал изменился)
print(r2.width) // Вывод: 50