Protocol
É considerado algo similar a interface em outras linguagens de programação, que permite encapsular funcionalidades de forma inteligente e faz parte do padrão de projeto Delegation.
Um protocolo define um modelo, que é composto por métodos, propriedades e requisitos que se adequam a uma tarefa ou um pedaço de funcionalidade.
Quem Pode se Conformar a um Protocolo?
Pode ser adotado por: class
, struct
, enum
e protocol
.
Qualquer tipo que satisfaça os requisitos de um protocolo pode dizer que se conforma ao protocolo.
Quando Devo Utilizar Protocolos?
- Quando há necessidade de diferentes classes que não necessariamente possuem alguma relação se conformarem a algum comportamento específico (Métodos e propriedades).
- Quando há necessidade de minimizar a quantidade de trechos de códigos desnecessários.
- Quando se deseja utilizar protocolos como um tipo.
Requisitos
Requisitos são todos os itens necessários para entrar em conformidade com um protocolo. Quando alguma class, struct, enum ou protocol se conforma a um protocolo, eles devem implementar os requisitos do mesmo.
Um protocolo pode requisitar a qualquer tipo que se conforme a ele:
- Propriedades de instância.
- Propriedade de tipo.
- Métodos de instância.
- Métodos de tipo.
Como criar um protocolo?
A declaração de um protocol
é igual a de classes, structs e enums.
Propriedades
Um protocolo pode requisitar que o tipo conformante providencie uma propriedade de instância ou propriedade de tipo (static).
Contudo, o protocolo só especifica o nome e o tipo da propriedade, além de definir se ela será gettable e/ou settable:
gettable -
{ get }
Nesta categoria, qualquer tipo de propriedade pode satisfazer a requisição.
gettable & settable -
{ get set }
Nesta categoria, a propriedade não pode atingir os requisitos caso seja uma constante ou propriedade computada de leitura. Qualquer outro tipo funcionará sem problemas.
Por exemplo, se fossemos criar um protocolo que diria se uma algo possui um nome e sobrenome:
Mas e se quiséssemos que existisse um método que nos retornasse o nome completo?
Métodos
Protocolos podem requisitar métodos de tipo e instância específicos aos tipos conformantes.
Estes métodos são escritos da mesma forma que métodos de classe normal, porém sem as chaves e sem corpo. A única diferença é que não podemos usar valores padrão para os parâmetros dentro desses métodos.
Então, para criar aquele método que retorna o nome completo:
Como se conformar a um protocolo?
Classes, Structs e Enums se conformam a protocolos de maneira similar.
Lembrando que para se conformar ao protocolo é necessário implementar todos os métodos e atributos definidos no mesmo, caso contrário um erro será apresentado na tela do Xcode.
Class
Após a declaração de sua classe, basta colocar o nome do protocolo antecedido de ‘:’ para que ele passe a se conformar a tal protocolo.
Struct e Enum
Structs e Enums se conformam a protocolos da mesma forma que classes, a única diferença é que dada a natureza destas estruturas, métodos que alterem o estado delas precisam ser definidos usando a keyword mutating
.