Junior
Каква е разликата между референтните типове и типовете стойности?
sobes.tech AI
Отговор от AI
Типове стойности (Value Types) се копират при присвояване или предаване към функция. Всяко копие има свои собствени данни.
Типовете референции (Reference Types) при присвояване или предаване към функция, предават референция към същия екземпляр данни. Промяната на данните чрез една референция ще се отрази във всички други референции към същия екземпляр.
| Характеристика | Тип стойност (Value Type) | Тип референция (Reference Type) |
|---|---|---|
| Поведение при присвояване/предаване | Копиране | Предаване на референция |
| Местоположение в паметта | Стек (Heap) | Купчина (Stack) |
| Управление на паметта | Автоматично (чрез стек) | Автоматично (ARC) |
| Примери в Swift | struct, enum, tuple |
class, func, closure |
// Пример за тип стойност (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 получава копие на p1
p2.x = 10 // Промяната в p2 не влияе на p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Пример за тип референция (Клас)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 реферира към същия обект като c1
c2.x = 10 // Промяната в c2 влияе на c1, защото и двамата сочат към един и същ обект
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10