Middle
Jak mohou uzávěry zachytit hodnoty typu value type?
sobes.tech AI
Odpověď od AI
Uzávěry zachycují kopii hodnoty typu value v okamžiku jejich definice. Pokud se hodnota typu value změní po definici uzávěru, uvnitř uzávěru bude dostupná její původní kopie, nikoliv změněná hodnota.
var counter = 0
let incrementCounter = { // Uzávěr zachytí kopii `counter` (0)
counter += 1
print(counter)
}
incrementCounter() // Vytiskne 1
counter = 10 // Změníme původní proměnnou `counter`
incrementCounter() // Vytiskne 2. Uzávěr pracuje s zachycenou kopií, nikoliv se změněnou proměnnou.
Při použití @escaping s uzávěry typu value je důležité vzít v úvahu tento mechanismus zachycení kopie, protože hodnota se může před voláním uzávěru změnit.