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