Sobes.tech
Middle

Ako môžu uzávery zachytiť hodnoty typu value type?

sobes.tech AI

Odpoveď od AI

Uzávery zachytávajú kópiu hodnoty typu value v okamihu jej definície. Ak sa hodnota typu value zmení po definovaní uzáveru, vo vnútri uzáveru bude dostupná jej pôvodná kópia, nie zmenená hodnota.

var counter = 0

let incrementCounter = { // Uzáver zachytáva kópiu `counter` (0)
    counter += 1
    print(counter)
}

incrementCounter() // Vytlačí 1
counter = 10 // Zmeníme pôvodnú premennú `counter`

incrementCounter() // Vytlačí 2. Uzáver pracuje s zachytenou kópiou, nie so zmenenou premennou.

Pri použití @escaping s uzávermi typu value je dôležité vziať do úvahy tento mechanizmus zachytenia kópie, pretože hodnota sa môže pred volaním uzáveru zmeniť.