Sobes.tech
Junior — Middle

Como é que o encerramento interage com uma instância de uma estrutura na linguagem de programação?

sobes.tech IA

Resposta da IA

Em Swift, as estruturas são tipos de valor, ou seja, ao passá-las ou atribuí-las, uma cópia da instância é criada. Os closures, capturando variáveis do contexto externo, podem interagir com a instância da estrutura, mas é importante entender que eles capturam cópias dos valores, não a própria instância.

Se um closure captura uma propriedade da estrutura, ele capturará seu valor atual, não uma referência ao original. Portanto, as mudanças dentro do closure não afetarão a instância original da estrutura, a menos que o closure seja marcado como @escaping e trabalhe com parâmetros inout ou referências.

Exemplo:

struct Counter {
    var count = 0
    mutating func incrementer() -> () -> Void {
        return { [self] in
            print("Count is \(count)")
        }
    }
}

var counter = Counter()
let closure = counter.incrementer()
counter.count = 10
closure() // Vai imprimir "Count is 0", porque o closure capturou uma cópia de self

Para que o closure possa modificar o estado da estrutura, é necessário usar inout ou trabalhar com classes (tipos de referência).