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?