Sobes.tech
Middle

Kako zatvaranja mogu uhvatiti vrednosti tipa value type?

sobes.tech АИ

Одговор од АИ

Затварања снима копију вредности типа value у тренутку дефинисања. Ако се вредност типа value промени након дефинисања затварања, унутар затварања ће бити доступна његова оригинална копија, а не измењена вредност.

var counter = 0

let incrementCounter = { // Затварање снима копију `counter` (0)
    counter += 1
    print(counter)
}

incrementCounter() // Исписује 1
counter = 10 // Променимо оригиналну променљиву `counter`

incrementCounter() // Исписује 2. Затварање ради са ухваћеном копијом, а не са измењеном променљивом.

Када се користи @escaping са затварањима типа value, важно је узети у обзир овај механизам ухватања копије, јер вредност може да се промени пре позива затварања.