Sobes.tech
Junior — Middle

Aké dôsledky nastanú, ak je premenná typu value, zachytená v uzávere, zmenená a toto uzávere je znovu volané?

sobes.tech AI

Odpoveď od AI

V Swift, ak je premenna typu hodnoty (napríklad štruktúra alebo primitívny typ) zachytená v uzávierke, uzávier získa kópiu tejto premennej v okamihu jej vytvorenia. Ak sa po vytvorení uzávierky pôvodná premená zmení, pri ďalšom volaní uzávierky sa použije presne táto pôvodná zachytená kópia a nie aktualizovaná hodnota.

To znamená, že zmeny premennej mimo uzávierky neovplyvňujú už zachytenú hodnotu vo vnútri uzávierky.

Príklad:

var x = 10
let closure = { print(x) }
x = 20
closure() // Vytlačí 10, nie 20

Ak chcete, aby uzávier videl aktuálnu hodnotu premennej, musíte ju zachytiť odkazom (napríklad pomocou triedy alebo parametrov inout), alebo vytvoriť nový uzávier po zmene premennej.