Sobes.tech
Junior

Jaka jest różnica między typami referencyjnymi a typami wartości?

sobes.tech AI

Odpowiedź od AI

Typy wartości (Value Types) są kopiowane podczas przypisywania lub przekazywania do funkcji. Każda instancja ma własną kopię danych.

Typy referencyjne (Reference Types) podczas przypisywania lub przekazywania do funkcji przekazują odniesienie do tej samej instancji danych. Zmiana danych przez jedno odniesienie będzie odzwierciedlona we wszystkich innych odniesieniach do tej samej instancji.

Charakterystyka Typ wartości (Value Type) Typ referencyjny (Reference Type)
Zachowanie przy przypisaniu/przekazaniu Kopiowanie Przekazywanie odniesienia
Lokalizacja w pamięci Stos (Heap) Sterta (Stack)
Zarządzanie pamięcią Automatyczne (przez stos) Automatyczne (ARC)
Przykłady w Swift struct, enum, tuple class, func, closure
// Przykład typu wartości (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 otrzymuje kopię p1
p2.x = 10   // Zmiana p2 nie wpływa na p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Przykład typu referencyjnego (Klasa)
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 odnosi się do tego samego obiektu co c1
c2.x = 10   // Zmiana c2 wpływa na c1, ponieważ oba wskazują na ten sam obiekt
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10