Existe algum material que fale mais sobre protocolo? O que é? Quando usar?
Obrigado.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?