Sobes.tech
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