Sobes.tech
Junior

Mis vahe on viite- ja väärtustüüpidel?

sobes.tech AI

Vastus AI-lt

Tüübid väärtused (Value Types) kopeeritakse määramisel või funktsioonile edastamisel. Igal eksemplaril on oma andmete koopia.

Viidetüübid (Reference Types) edastamisel või funktsioonile andmete viidet samale eksemplarile. Andmete muutmine ühe viite kaudu kajastub kõigil teistel viidetel sellele samale eksemplarile.

Omadus Väärtusetüüp (Value Type) Viidetüüp (Reference Type)
Määramisel/edastamisel käitumine Kopeerimine Viite edastamine
Mälu asukoht Käsn (Heap) Kogum (Stack)
Mälu haldamine Automaatne (käsn kaudu) Automaatne (ARC)
Näited Swiftis struct, enum, tuple class, func, closure
// Näide Väärtusetüübist (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 saab koopia p1-st
p2.x = 10   // Põhimõtteliselt ei mõjuta p1 muutmine p2-d
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Näide Viidetüübist (Class)
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 viitab samale eksemplarile, mis c1
c2.x = 10   // Muutmine c2-s mõjutab c1-d, kuna nad viitavad samale objektile
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10