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, важно је узети у обзир овај механизам ухватања копије, јер вредност може да се промени пре позива затварања.