Sobes.tech
Junior

Aký je rozdiel medzi referenčnými a hodnotovými typmi?

sobes.tech AI

Odpoveď od AI

Tipy hodnot (Value Types) sa kopírujú pri priraďovaní alebo odovzdávaní do funkcie. Každý prípad má vlastnú kópiu údajov.

Typy odkazov (Reference Types), pri priraďovaní alebo odovzdávaní do funkcie, odovzdávajú odkaz na rovnaký inštanciu údajov. Zmeny údajov cez jeden odkaz sa prejavia vo všetkých ostatných odkazoch na tú istú inštanciu.

Charakteristika Typ hodnot (Value Type) Typ odkazu (Reference Type)
Správanie pri priraďovaní/odovzdávaní Kopírovanie Odovzdanie odkazu
Umiestnenie v pamäti Zásobník (Heap) Hromada (Stack)
Správa pamäti Automatická (cez zásobník) Automatická (ARC)
Príklady v Swift struct, enum, tuple class, func, closure
// Príklad typu hodnoty (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 dostáva kópiu p1
p2.x = 10   // Zmena v p2 neovplyvní p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Príklad typu odkazu (Trieda)
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 ten istý objekt ako c1
c2.x = 10   // Zmena v c2 ovplyvní c1, pretože obaja odkazujú na ten istý objekt
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10