Sobes.tech
Junior

Como implementar o corpo de uma função declarada em um protocolo?

sobes.tech IA

Resposta da IA

Em Swift, um protocolo pode declarar assinaturas de métodos, bem como fornecer uma implementação padrão para esses métodos através de extensões (extensões de protocolo).

Implementação numa extensão de protocolo

A forma mais comum de fornecer o corpo de uma função para um método declarado no protocolo:

protocol MyProtocol {
    func processData() // Declaração do método
}

extension MyProtocol {
    // Implementação padrão
    func processData() {
        print("Processamento de dados padrão...")
    }
}

// Classe que conforma ao protocolo e usa a implementação padrão
class MyClass: MyProtocol {
    // Não é necessário implementar processData se desejar a versão padrão
}

// Classe que sobrescreve a implementação
class AnotherClass: MyProtocol {
    func processData() {
        print("Processamento de dados de outra forma...")
    }
}

let instance1 = MyClass()
instance1.processData() // Irá mostrar: Processamento de dados padrão...

let instance2 = AnotherClass()
instance2.processData() // Irá mostrar: Processamento de dados de outra forma...

Implementação no tipo correspondente

O tipo (classe, estrutura ou enumeração) que conforma ao protocolo deve fornecer a sua própria implementação para cada método declarado no protocolo, se o protocolo não fornecer uma implementação padrão ou se for necessária uma lógica diferente.

protocol AnotherProtocol {
    func performAction(with value: Int) // Método sem implementação padrão
}

// Estrutura que conforma ao protocolo e fornece sua própria implementação
struct MyStruct: AnotherProtocol {
    func performAction(with value: Int) {
        print("Executar ação com o valor: \(value)")
    }
}

let instance3 = MyStruct()
instance3.performAction(with: 42) // Irá mostrar: Executar ação com o valor: 42

Conclusões

  • Extensão de protocolo: Fornece uma implementação padrão que pode ser usada por tipos que conformam ao protocolo. Os tipos podem sobrescrever essa implementação.
  • Tipo correspondente: É obrigado a implementar os métodos do protocolo se não houver uma implementação padrão ou se for necessária uma lógica personalizada.

A escolha do método de implementação depende se a lógica do método é específica para cada tipo que conforma ao protocolo ou se pode ser comum a todos os tipos (com possibilidade de sobrescrever).