Junior — Middle
Jak rozlišit datové typy založené na odkazech od typů, které ukládají hodnoty přímo?
sobes.tech AI
Odpověď od AI
V iOS (Swift a Objective-C) jsou datové typy rozděleny na typy hodnot (value types) a referenční typy (reference types).
-
Typy hodnot přímo ukládají data. Při přiřazení nebo předání funkci se vytvoří kopie dat. Ve Swiftu patří mezi ně struktury (
struct), výčty (enum) a základní typy, napříkladInt,Double,Bool. -
Referenční typy ukládají odkaz na oblast paměti, kde jsou data uložena. Při přiřazení se kopíruje odkaz, nikoli data samotná. Změny přes odkaz jsou viditelné i jinde. Ve Swiftu jsou to třídy (
class).
Jak je odlišit:
- Ve Swiftu, pokud je typ deklarován jako
structneboenum, je to typ hodnot. - Pokud je deklarován jako
class, je to referenční typ.
Příklad:
struct Point {
var x: Int
var y: Int
}
class Person {
var jmeno: String
init(jmeno: String) {
self.jmeno = jmeno
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - kopie se nezměnila
var osoba1 = Person(jmeno: "Alice")
var osoba2 = osoba1
osoba2.jmeno = "Bob"
print(osoba1.jmeno) // Bob - obě proměnné odkazují na stejný objekt
Tímto způsobem lze podle chování při přiřazení a změně rozlišit typy založené na odkazech od těch, které přímo ukládají hodnoty.