Junior
Kuo skiriasi nuorodų tipai nuo reikšmių tipų?
sobes.tech AI
Atsakymas iš AI
Vertės tipai (Value Types) kopijuojami priskyrimo arba perdavimo funkcijai metu. Kiekvienas pavyzdys turi savo duomenų kopiją.
Nuorodų tipai (Reference Types) priskyrimo arba perdavimo funkcijai metu perduoda nuorodą į tą pačią duomenų kopiją. Duomenų keitimas per vieną nuorodą atsispindės visuose kituose nuorodose į tą patį pavyzdį.
| Savybė | Vertės tipas (Value Type) | Nuorodos tipas (Reference Type) |
|---|---|---|
| Elgsena priskyrimo/perdavimo metu | Kopijavimas | Nuorodos perdavimas |
| Atminties vieta | Krūva (Heap) | Krūva (Stack) |
| Atminties valdymas | Automatinis (per krūvą) | Automatinis (ARC) |
| Pavyzdžiai Swift'e | struct, enum, tuple |
class, func, closure |
// Vertės tipo pavyzdys (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 gauna kopiją iš p1
p2.x = 10 // Pakeitimai p2 neveikia p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Nuorodos tipo pavyzdys (Klasė)
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 nuoroda į tą patį objektą kaip ir c1
c2.x = 10 // Pakeitimai c2 paveiks c1, nes abu nurodo į tą patį objektą
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10