Sobes.tech
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