Junior — Middle
Ako rozlíšiť typy údajov založené na odkazoch od typov údajov, ktoré ukladajú hodnoty priamo?
sobes.tech AI
Odpoveď od AI
V iOS (Swift a Objective-C) sa typy údajov delia na typy hodnôt (value types) a typy odkazov (reference types).
-
Typy hodnôt priamo ukladajú údaje. Pri priraďovaní alebo odovzdaní do funkcie sa vytvorí kópia údajov. V Swift sem patria štruktúry (
struct), výčty (enum) a základné typy akoInt,Double,Bool. -
Typy odkazov ukladajú odkaz na oblasť pamäti, kde sa údaje nachádzajú. Pri priraďovaní sa kopíruje odkaz, nie údaje. Zmeny cez odkaz sú viditeľné aj inde. V Swift sú to triedy (
class).
Ako ich odlíšiť:
- V Swift, ak je typ deklarovaný ako
structaleboenum, je to typ hodnôt. - Ak je deklarovaný ako
class, je to typ odkazov.
Príklad:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - kópia sa nezmenila
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - obe premenné odkazujú na ten istý objekt
Týmto spôsobom, podľa správania pri priraďovaní a zmenách, je možné odlíšiť typy založené na odkazoch od tých, ktoré ukladajú hodnoty priamo.