Sobes.tech
Junior — Middle

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 poput Int, 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 struct ili enum, 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.