Sobes.tech
Junior

Каква е разликата между референтните типове и типовете стойности?

sobes.tech AI

Отговор от AI

Референцията съхранява адрес в паметта, който сочи към данните, съхранявани там. Всъщност, променливата, която съхранява референцията, притежава само този адрес, а не самите данни. Присвояването на референтен тип към променлива копира референцията, а не данните. Промените в данните, към които сочи референцията, се отразяват във всички променливи, които я съхраняват.

Типът стойност директно съхранява данните. Присвояването на тип стойност към променлива копира самите данни. Промените в една променлива от тип стойност не засягат други променливи, получили тази копие.

Характеристика Референтен тип Тип стойност
Съхранение Референция към данни Самите данни
Присвояване Копиране на референцията Копиране на данните
Промяна Влияе върху всички референции Не влияе върху копията
Местоположение В heap В stack
Освобождаване ARC / събирач на боклука Автоматично при излизане от обхвата
Примери в Swift class, closure struct, enum, tuple, основни типове (Int, Bool, String и др.)
// Пример за референтен тип (клас)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Копира се референцията
ref2.value = 20 // Данните, към които сочат ref1 и ref2, се променят
print(ref1.value) // Изход: 20
print(ref2.value) // Изход: 20

// Пример за стойностен тип (структура)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Данните се копират
val2.value = 20 // Само данните в val2 се променят
print(val1.value) // Изход: 10
print(val2.value) // Изход: 20