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ť.