Kako razlikovati tipove podataka zasnovane na referencama od tipova podataka koji direktno čuvaju vrednosti?
sobes.tech АИ
Одговор од АИ
U iOS-u (Swift i Objective-C) tipovi podataka dele se na tipove vrednosti (value types) i tipove referenci (reference types).
-
Tipovi vrednosti direktno čuvaju podatke. Pri dodeljivanju ili prosleđivanju funkciji, kreira se kopija podataka. U Swift-u, to su strukture (
struct), enumeracije (enum) i osnovni tipovi poputInt,Double,Bool. -
Tipovi referenci čuvaju referencu na memorijsku oblast gde se podaci nalaze. Pri dodeljivanju, kopira se referenca, a ne podaci. Promene putem jedne reference su vidljive i putem drugih. U Swift-u, to su klase (
class).
Kako ih razlikovati:
- U Swift-u, ako je tip deklarisan kao
structilienum, to je tip vrednosti. - Ako je deklarisan kao
class, to je tip reference.
Primer:
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 - kopija se nije promenila
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - obe promenljive ukazuju na isti objekat
Na ovaj način, ponašanje pri dodeljivanju i izmenama omogućava razlikovanje tipova zasnovanih na referencama od onih koji direktno čuvaju vrednosti.