Junior
Was ist der Unterschied zwischen Referenztypen und Wertetypen?
sobes.tech KI
Antwort von AI
Value Types (Werttypen) werden beim Zuweisen oder Übergeben an eine Funktion kopiert. Jede Instanz hat ihre eigene Kopie der Daten.
Reference Types (Referenztypen) werden beim Zuweisen oder Übergeben an eine Funktion als Referenz auf die gleiche Dateninstanz übertragen. Änderungen an den Daten über eine Referenz wirken sich auf alle anderen Referenzen auf diese Instanz aus.
| Merkmal | Werttyp (Value Type) | Referenztyp (Reference Type) |
|---|---|---|
| Verhalten bei Zuweisung/Übergabe | Kopieren | Referenzübertragung |
| Speicherort | Stack (Heap) | Heap (Stack) |
| Speicherverwaltung | Automatisch (über den Stack) | Automatisch (ARC) |
| Beispiele in Swift | struct, enum, tuple |
class, func, closure |
// Beispiel Werttyp (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 erhält eine Kopie von p1
p2.x = 10 // Änderung an p2 beeinflusst p1 nicht
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Beispiel Referenztyp (Klasse)
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 referenziert dasselbe Objekt wie c1
c2.x = 10 // Änderung an c2 wirkt sich auf c1 aus, da beide auf dasselbe Objekt zeigen
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10