Назад к вопросам
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