Sobes.tech
Junior — Middle

Como é que o uso de uma variável dentro de um closure e a subsequente chamada desse closure após a sua alteração afeta o valor final da variável counter?

sobes.tech IA

Resposta da IA

Se uma variável counter for usada dentro de um encerramento, o comportamento depende de como exatamente o encerramento captura essa variável:

  • Em Swift, os encerramentos capturam variáveis por referência se forem declaradas como var. Isso significa que, se após criar o encerramento o valor de counter mudar, ao chamar o encerramento será usado o valor atual.

Exemplo:

var counter = 0
let closure = {
    print(counter)
}
counter = 5
closure() // Vai imprimir 5
  • Se a variável foi capturada como uma constante (por exemplo, via let dentro do encerramento ou se o encerramento copia explicitamente o valor), então a mudança fora do encerramento não afetará o valor dentro.

Portanto, ao usar uma variável dentro de um encerramento e alterar seu valor posteriormente, o valor final ao chamar o encerramento refletirá o estado atual da variável se ela foi capturada por referência.