Junior — Middle
Milyen következményekkel jár, ha egy value típusú változót, amelyet egy zárban fogtak el, megváltoztatnak, és ez a zár újra meghívódik?
sobes.tech MI
Válasz az MI-től
Swiftben, ha egy érték típusú változót (például struct vagy primitív típus) bezárásban foglalunk, akkor a bezárás a változó másolatát kapja meg a létrehozás pillanatában. Ha a bezárás létrehozása után az eredeti változó megváltozik, akkor a későbbi hívás a bezárásra pontosan ezt a kezdetben fogott másolatot fogja használni, és nem a frissített értéket.
Ez azt jelenti, hogy a változó külső változtatásai nem befolyásolják a már fogott értéket a bezárás belsejében.
Példa:
var x = 10
let closure = { print(x) }
x = 20
closure() // Kiírja 10-et, nem 20-at
Így, ha azt szeretnéd, hogy a bezárás lássa az aktuális értéket, akkor referencián keresztül kell fogni (például, osztályt vagy inout paramétereket használva), vagy új bezárást kell létrehozni a változó módosítása után.