Sobes.tech
Junior — Middle

Qual é a diferença entre o método de transmissão de dados usando um bloco fechado (Closure) e usando um delegado (Delegate)?

sobes.tech IA

Resposta da IA

O bloco fechado (Closure) e o delegado (Delegate) são mecanismos diferentes de transmissão e processamento de dados/lógica.

  • Closure — é uma função que captura e mantém o contexto (variáveis) do escopo circundante. Permite transmitir lógica juntamente com o estado.

  • Delegate — é um padrão em que um objeto transfere a responsabilidade para outro através de uma interface ou protocolo predefinido. No iOS, os delegados geralmente são implementados através de protocolos e permitem que um objeto notifique outro sobre eventos.

Diferenças:

  • Closure — é uma função com fechamento, mais flexível e compacta, frequentemente usada para callbacks.
  • Delegate — é um objeto com uma interface definida que implementa métodos, proporcionando uma interação mais estruturada.

Exemplo de closure em Swift:

let closure = { (value: Int) in
    print("O valor é \(value)")
}
closure(10)

Exemplo de delegado:

protocol MyDelegate: AnyObject {
    func didUpdate(value: Int)
}

class Worker {
    weak var delegate: MyDelegate?
    func doWork() {
        // ...
        delegate?.didUpdate(value: 42)
    }
}