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.