Sobes.tech
Junior

Kāda ir atšķirība starp atsauces tipiem un vērtības tipiem?

sobes.tech AI

Atbilde no AI

Vērtību tipi (Value Types) tiek kopēti pie piešķiršanas vai nodošanas funkcijai. Katram gadījumam ir sava datu kopija.

Atsauces tipi (Reference Types) pie piešķiršanas vai nodošanas funkcijai nodod atsauci uz to pašu datu instanci. Datu izmaiņas caur vienu atsauci ietekmēs visas citas atsauces uz šo pašu instanci.

Īpašība Vērtību tips (Value Type) Atsauces tips (Reference Type)
Uzvedība pie piešķiršanas/nodošanas Kopēšana Atsauces nodošana
Atmiņas atrašanās vieta Krava (Heap) Krava (Stack)
Atmiņas pārvaldība Automātiska (caur kravu) Automātiska (ARC)
Piemēri Swift struct, enum, tuple class, func, closure
// Vērtību tipa piemērs (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 saņem p1 kopiju
p2.x = 10   // Izmaiņas p2 neietekmē p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Atsauces tipa piemērs (Klase)
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 norāda uz to pašu objektu, kas c1
c2.x = 10   // Izmaiņas c2 ietekmēs c1, jo abi norāda uz to pašu objektu
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10