Declarando um Protocolo em Swift
Um protocolo é introduzido no Swift pela palavra-chave protocolo. Ele contém o # 173-declarações que devem ser implementadas pelos tipos que adotam o protocolo. Os elementos mais comuns de um protocolo são métodos e propriedades. O exemplo mostrado aqui usa uma única propriedade, mas várias propriedades em um # 173-protocol são permitidos. Você também pode ter propriedades em protocolos que são adotadas por classes e estruturas.
Funções (métodos) pode ser adotado por todos os tipos que pode adotar protocolos (isto é, classes, estruturas e # 173-enumerações).
Um protocolo é chamado, assim como outros elementos Swift são nomeados. A declaração protocolo básico se parece com isso:
MyProtocol protocolo {}
Tal como acontece com as classes, estruturas e enumerações, o nome é maiúscula. Na verdade, a maioria dos objetos Swift excepto para as propriedades e funções são capitalizados, e eles usam interna camelCase (letras maiúsculas para cada uma das palavras incorporados excepto o primeiro).
Se o protocolo contém uma função que deve ser implementada por tipos que o adotam, a declaração de protocolo pode ter esta aparência:
protocolo MyProtocol {func myFunc () -> string}
Um objecto em conformidade com a MyProtocol deve implementar myFunc.
A fim de concentrar-se na sintaxe de protocolos, os exemplos aqui mostram instância métodos em vez de digitar métodos, que são comparáveis aos classe métodos em Objective # 8208-C. métodos de instância são mais comumente usados.
Protocolos podem herdar um do outro. Assim, você pode declarar um par de protocolos como segue:
protocolo MyProtocol {func myFunc () -> string} protocolo MyProtocol2: MyProtocol {func myFunc2 () -> string}
Um objecto em conformidade com a MyProtocol deve implementar myFunc. Um objecto em conformidade com a MyProtocol2 deve implementar myFunc2, mas também deve implementar myFunc Porque MyProtocol2 herda de MyProtocol. E se MyProtocol2 vale por si só (ou seja, se ele não herda de MyProtocol), Os objectos que estão em conformidade com qualquer MyProtocol ou MyProtocol2 deve implementar myFunc - mas esta é a mesma função nos dois protocolos. Esta certo. Só não acho que você tem para implementá-lo duas vezes.
Não use uma estrutura na qual uma função idêntica # 8208-nomeado (ou propriedade) é usado em vários protocolos, a menos que você realmente queria dizer isso. (A nisso função seria um bom exemplo da boa utilização de nomes de funções duplicadas.)
Se você quiser que o seu protocolo a ser adotada apenas por classes, use a classe palavra-chave na lista, como no seguinte:
Protocolo MyProtocol: classe, MyProtocolToInheritFrom
Observe que a classe é a palavra-chave que você usa: Não é o nome de uma classe.