Existe algum material que fale mais sobre protocolo? O que é? Quando usar?
Obrigado.
Existe algum material que fale mais sobre protocolo? O que é? Quando usar?
Obrigado.
É bem difícil achar material que fale de swift em português, tornando os estudos um pouco mais difícil para quem quer aprender e não domina o inglês. Mas não tem outro jeito, recomendo que busque na internet mesmo explicações, de preferencia procure em inglês. Baixa o app do medium e busca por lá
Inclusive, acho que alura/caelum poderiam fazer um livro mais completo sobre a linguagem swift. Lá na casa do código só tem um livro que é bem simples, mesma coisas dos primeiros três cursos, o aplicativo de comida, então quem ficou com dúvida, infelizmente lendo esse livro não resolve. E aqui nos fóruns dificilmente respondem e quando responde não são respostas tão completas.
A analogia mais direta para entender protocol em swift é:
Um protocol é bem semelhante a uma interface Java
Então, dessa comparação já podemos ter uma boa ideia de quando e como devemos usá-lo. Dê uma olhada nesse exemplo:
Suponha o protocolo Exibivel
, que define um método que todo elemento exibível na tela deve ter:
protocol Exibivel {
func imprime()
}
Perceba que no protocol só devemos colocar a assinatura dos métodos e não o seu conteúdo (o método imprime
não tem corpo)!
Beleza. Se o protocol tem só a assinatura dos métodos, onde fica o conteúdo deles? Agora precisamos fazer uma classe que implementa esse protocol:
class Pessoa : Exibivel {
func imprime() {
//Aqui é o corpo do método imprime
}
}
Veja que a classe Pessoa
implementa o protocol Exibivel, então ela deve definir o conteúdo do método imprime
.
class Pessoa : Exibivel {
func imprime() {
print ("Sou uma pessoa!")
}
}
Podemos criar uma outra classe qualquer e dizer que ela também é um elemento exibível:
class Animal : Exibivel {
func imprime() {
print("Sou um animal!")
}
}
Como Pessoa
e Animal
são Exibivel
, podemos usar essa característica em comum num método:
class Mostrador {
func mostra(elemento: Exibivel) {
elemento.imprime()
}
}
Veja que o método mostra(elemento:)
não sabe se virá uma Pessoa
ou Animal
, mas sabe que independentemente do objeto ele deverá possuir o método imprime
, que todo Exibivel
tem.
Logo, podemos usar nossa classe Mostrador
da seguinte forma:
let animal = Animal()
let pessoa = Pessoa()
let mostrador = Mostrador()
mostrador.mostra(elemento: animal) //(1)
mostrador.mostra(elemento: pessoa) //(2)
Resultando em:
Sou um animal! //(1)
Sou uma pessoa! //(2)
Perceba que a variável animal
é do tipo Animal
, porém como ela implementa Exibivel
, podemos usar animal
em qualquer lugar que precise de um Exibivel
.
Chamamos essa característica de polimorfismo. ;)
Ou seja: usamos protocol quando queremos favorecer polimorfismo, permitindo que um método não precise conhecer o tipo real que será passado, apenas conheça o protocol.
Podemos fazer umas coisas mais avançadas num protocol, mas deixo para uma próxima. Beleza?