Sobes.tech
Junior — Middle

Que consequências ocorrem se uma variável do tipo value, capturada numa closure, for alterada e essa closure for chamada novamente?

sobes.tech IA

Resposta da IA

Em Swift, se uma variável de tipo valor (por exemplo, uma struct ou um primitivo) for capturada numa closure, a closure obtém uma cópia dessa variável no momento da sua criação. Se após a criação da closure a variável original for alterada, a chamada subsequente à closure usará exatamente essa cópia que foi capturada inicialmente, e não o valor atualizado.

Isto significa que as alterações na variável fora da closure não afetam o valor já capturado dentro da closure.

Exemplo:

var x = 10
let closure = { print(x) }
x = 20
closure() // Vai imprimir 10, não 20

Portanto, se desejar que a closure veja o valor atual da variável, deve capturá-la por referência (por exemplo, usando uma classe ou parâmetros inout), ou criar uma nova closure após modificar a variável.