Protocol Delegate em Swift

Cassia Barbosa
Apple Developer Academy | Mackenzie
2 min readSep 24, 2021

Imagine um aplicativo em que você tenha que passar informações entre Views. Imaginou? Bom, quase todos os apps precisam disso, certo? Agora imagine que você tenha uma View Controller que contenha uma Table View Controller, como você faria para que table faça algo na view principal? Bom, pra isso que vamos aprender hoje a usar Protocol Delegate.

Passo 0: Projeto

Para melhor acompanhar o tutorial, sugiro que você acesse o projeto neste link e então siga os próximos passos.
https://github.com/cassiaabarbosa/ProtocolDelegate

Passo 0,5 : No Storyboard

Nos meus projetos eu não uso Storyboard, portanto, se você ainda não conhece como colocar elementos de UI programaticamente, sugiro que acesse esse outro tutorial meu para entender melhor.

Passo 1: View A e View B

Vamos trabalhar com dois tipos de views, uma será a ViewController, que conterá uma UITableView e a outra view será a própria UITableView. Observe que são duas views distintas A (ViewController) e B (UITableView)
que têm relação entre sim, porém a view B consegue mandar dados para a view A ou fazer com que a view A executa alguma ação quando o usuário pressionar a view B. Para que o Protocol Delegate não fique confuso, tenha isso em sua mente.

Passo 2: Protocol

A definição do Protocol sempre estará na View B, isso quer dizer que no início do arquivo que a view que quer passar uma informação, eu deverei fazer:

protocol Nome_do_Delegate: AnyObject {    func nome_da_Funcao_Implementada_pelo_Delegate()}

Ainda na view B eu deverei fazer o código abaixo; weak aqui serve para que eu possa usar depois o delegate sem reter estados indesejados.

weak var delegate: nome_do_Delegate?

Passo 3: Delegate

Quem implementa a função do delegate é a view A, portanto, no final dessa view eu crio uma extension, como no código a seguir:

extension Nome_View_Controller_A: Nome_do_Delegate {   func nome_da_Funcao_Implementada_pelo_Delegate() {//   passo informações, ajustes, o que eu quiser fazer no função   }}

Ainda na view A, onde eu crio a view B, eu devo dizer que: viewB.delegate = self, isso faz com que aquela variável delegate da view B crie uma referência na view A.

Passo 4: Chamando o Delegate

Agora, para finalizar, devemos chamar a função na view B que foi criada no Protocol e implementada pelo Delegate dessa maneira:

delegate?.nome_da_Funcao_Implementada_pelo_Delegate()

Assim, quando algo acontecer na view B, principalmente por interação com o usuário, algo poderá ser atualizado na view A.

--

--