Sobes.tech
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.