Sobes.tech
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.