Sobes.tech
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 ako Int, 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 struct alebo enum, 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.