Sobes.tech
Junior — Middle

Quelles sont les conséquences si une variable de type value, capturée dans une fermeture, est modifiée et que cette fermeture est appelée à nouveau?

sobes.tech IA

Réponse de l'IA

En Swift, si une variable de type valeur (par exemple, une struct ou un type primitif) est capturée dans une fermeture, la fermeture obtient une copie de cette variable au moment de sa création. Si après la création de la fermeture, la variable originale change, l'appel ultérieur à la fermeture utilisera exactement cette copie initialement capturée, et non la valeur mise à jour.

Cela signifie que les changements apportés à la variable en dehors de la fermeture n'affectent pas la valeur déjà capturée à l'intérieur de la fermeture.

Exemple:

var x = 10
let closure = { print(x) }
x = 20
closure() // Affichera 10, pas 20

Ainsi, si vous souhaitez que la fermeture voie la valeur actuelle de la variable, vous devez la capturer par référence (par exemple, en utilisant une classe ou des paramètres inout), ou créer une nouvelle fermeture après avoir modifié la variable.