Sobes.tech
Junior

Jaký je rozdíl mezi referenčními typy a hodnotovými typy?

sobes.tech AI

Odpověď od AI

Typy hodnot (Value Types) se přiřazují nebo předávají do funkce kopírováním. Každá instance má vlastní kopii dat.

Typy odkazů (Reference Types) při přiřazení nebo předání do funkce předávají odkaz na stejnou instanci dat. Změny dat provedené přes jeden odkaz se projeví ve všech ostatních odkazech na stejnou instanci.

Charakteristika Typ hodnot (Value Type) Typ odkazu (Reference Type)
Chování při přiřazení/předání Kopírování Předání odkazu
Umístění v paměti Zásobník (Heap) Hromada (Stack)
Správa paměti Automatická (přes zásobník) Automatická (ARC)
Příklady ve Swift struct, enum, tuple class, func, closure
// Příklad typu hodnoty (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 získává kopii p1
p2.x = 10   // Změna p2 neovlivní p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Příklad typu odkazu (Třída)
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 odkazuje na stejný objekt jako c1
c2.x = 10   // Změna c2 ovlivní c1, protože oba odkazují na stejný objekt
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10