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.