Sobes.tech
Middle

Co oznacza, że typ wartości (value type) należy do typu referencyjnego (reference type)?

sobes.tech AI

Odpowiedź od AI

Wartości typu są kopiowane podczas przypisywania lub przekazywania do funkcji, podczas gdy wartości typu referencyjnego są przekazywane przez odniesienie, czyli kopiuje się wskaźnik do istniejącego egzemplarza.

Typy wartości (Value Types):

  • Struktury (struct)
  • Enumy (enum)
  • Krotki (tuple)
  • Większość podstawowych typów (Int, String, Bool, Array, Dictionary, Set itp.)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Wartość p1 jest kopiowana do p2
p2.x = 10

// p1.x nadal jest 1, p2.x stało się 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Typy referencyjne (Reference Types):

  • Klasy (class)
  • Funkcje (closure)
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 egzemplarza co c1
c2.x = 10

// c1.x również stało się 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Główne różnice:

Cecha Typ Wartości (Value Type) Typ Referencyjny (Reference Type)
Przypisanie Kopiowanie wartości Kopiowanie odniesienia (wskaźnika)
Pamięć Przydzielana na stosie (w prostych przypadkach) Przydzielana na stercie
Współdzielenie Każda zmienna ma własną kopię Kilka zmiennych może odnosić się do tego samego egzemplarza
Mutowalność Aby zmienić, trzeba zmienić kopię Zmiany przez jedną referencję widoczne dla wszystkich

W rozwoju iOS oba typy są często używane. Znając ich różnice, możesz wybrać odpowiedni typ dla konkretnego zadania i unikać niepożądanych efektów ubocznych, szczególnie przy pracy z danymi mutowalnymi.