Middle
Hogyan foghatják el a zárak a value type típusú értékeket?
sobes.tech MI
Válasz az MI-től
A lezárások a lezárás meghatározásának pillanatában a value típusú érték másolatát fogják el. Ha a value típusú érték a lezárás meghatározása után megváltozik, akkor a lezáráson belül az eredeti másolata lesz elérhető, nem a módosított érték.
var counter = 0
let incrementCounter = { // A lezárás elfog egy másolatot a `counter`-ről (0)
counter += 1
print(counter)
}
incrementCounter() // 1-et ír ki
counter = 10 // Megváltoztatjuk az eredeti `counter` változót
incrementCounter() // 2-t ír ki. A lezárás a rögzített másolattal dolgozik, nem a módosított változóval.
Az @escaping használatakor value típusú lezárásoknál fontos figyelembe venni ezt a másolási mechanizmust, mivel az érték a lezárás hívása előtt megváltozhat.