Sobes.tech
Junior — Middle

Hogyan befolyásolja a változó használata egy zárványon belül, és ennek a zárványnak a későbbi hívása a változó értékének megváltoztatása után a counter változó végső értékét?

sobes.tech MI

Válasz az MI-től

Ha egy counter változót egy lezárásban használunk, akkor a viselkedés attól függ, hogyan ragadja meg pontosan a lezárás ezt a változót:

  • Swiftben a lezárások referencia szerint ragadják meg a változókat, ha var-ként vannak deklarálva. Ez azt jelenti, hogy ha a lezárás létrehozása után a counter értéke megváltozik, akkor a lezárás hívásakor az aktuális érték lesz használva.

Példa:

var counter = 0
let closure = {
    print(counter)
}
counter = 5
closure() // 5-öt fog kiírni
  • Ha a változót konstansként ragadták meg (például let-tel a lezárásban vagy ha a lezárás kifejezetten másolja az értéket), akkor a lezáráson kívüli változás nem befolyásolja a belső értéket.

Ezért, ha egy változót a lezárásban használunk, és később megváltoztatjuk az értékét, akkor a híváskor a végső érték tükrözni fogja a változó aktuális állapotát, ha referencia szerint ragadták meg.