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