Adotando e conformando uma classe, estrutura ou enumeração para um Protocolo Swift

Qualquer um dos tipos principais (classes, estruturas e enumerações) pode adotar protocolos. Você pode criar um protocolo que é adotada por qualquer um deles, ou você pode especificar que ele é adoptável apenas por uma classe. Aqui estão exemplos de conformidade com o protocolo básico (MyProtocol

).

Conformando uma classe para um protocolo

Muitos dos protocolos utilizados nos quadros de cacau e Cocoa Touch são adotadas por classes nos quadros em parte porque em Objective # 8208-C, os protocolos são normalmente usados ​​apenas com classes. Você vai ser capaz de se mover além das aulas, mas, quando você está escrevendo código que usa os quadros, você frequentemente tem que escrever código que está em conformidade com os protocolos para classes.

Aqui estão algumas diretrizes para conformar classes para protocolos:

  • Você especificar que uma classe adota um protocolo na sua declaração, como no seguinte:

    class MyClass: MyProtocol {
  • Se você adotar mais de um protocolo, separe-os com vírgulas, como no seguinte:

    MyClass classe: MyProtocol, MyProtocol2 {
  • Se sua classe é uma subclasse de outra classe, sua superclasse aparece em primeiro lugar na lista, como no seguinte:

    class MyClass: MySuperclass, MyProtocol2

    Lembre-se que Swift não suporta herança múltipla, por isso, só pode haver uma superclasse (ou nenhum). Você pode adicionar protocolos para a lista, se necessário.

Se sua classe é uma subclasse de uma classe que adota um protocolo, você deve estar em conformidade com esse protocolo em sua própria classe, a menos que a superclasse já está de acordo com isso. Você não especificar este protocolo adotado herdou em sua própria declaração.

Ter indicado que sua classe adota um protocolo, agora você deve implementar todas as propriedades e métodos necessários. (É possível significar que alguns métodos e propriedades são opcionais, mas a configuração padrão é que todos eles são necessários.)

Aqui é um exemplo de uma classe que está em conformidade com um protocolo. Observe que myFunc é requerido pelo protocolo, enquanto intval é uma propriedade de classe que não tem nada a ver com o protocolo:

class MyClass: MyProtocol {func myFunc () -> string {return "Protocolo 1"} var intval: int = 0}

Você pode criar uma variável (com var) Ou constante (com deixei) Que contém uma instância da classe com este código:

var myClass: MyClass = MyClass ()

Você pode então acessar a classe de intval propriedade da ocorrência, bem como método exigido pelo protocolo myFunc:

myClass.intVal 25myClass.myFunc = ()

Neste ponto, você não fazem distinção entre os métodos e propriedades exigidas pelo protocolo e aqueles que são simplesmente parte da classe.

Conformando uma estrutura com um protocolo

Uma estrutura (struct) Adota um protocolo da mesma forma como uma classe faz - com um código como este:

struct MyStruct: MyProtocol {func myFunc () -> string {return "Protocolo 2"} var intval: Int = 0var One = 1Var Dois = 2}

Você pode declarar uma variável que usa a estrutura. Em seguida, pode acessar os membros da estrutura, bem como a função que é requerido pelo protocolo:

var myStruct: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc ()

Conformando uma enumeração de um protocolo

Enumerações seguem o mesmo design básico. Você pode declarar uma enumeração que adota um protocolo juntamente com os seus próprios dados, como no seguinte código:

enum MyEnum: MyProtocol {func myFunc () -> string {return "Protocolo 3"} caso Onecase Twocase Threecase Quatro}

Em seguida, use a enumeração com uma variável no seu código:

var myEnum: MyEnum = MyEnum.TwomyEnum.myFunc ()

Juntando tudo

A listagem a seguir mostra essas amostras juntos.

// Recreio - nome: um lugar onde as pessoas podem playprotocol MyProtocol {func myFunc () -> string} class MyClass: MyProtocol {func myFunc () -> string {return "Protocolo 1"} var intval: int = 0} var myClass : MyClass = MyClass () myClass.intVal = 25myClass.myFunc () struct MyStruct: MyProtocol {func myFunc () -> string {return "Protocolo 2"} var intval: Int = 0var One = 1Var dois = 2} enum MyEnum: MyProtocol {func myFunc () -> string {return "Protocolo 3"} caso Onecase Twocase Threecase Quatro} var myStruct: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc () var myEnum: MyEnum = MyEnum.TwomyEnum.myFunc ( )

menu