Adoptar y conformando una clase, estructura o enumeración a un protocolo rápido
Cualquiera de los principales tipos (clases, estructuras y enumeraciones) pueden adoptar protocolos. Usted puede crear un protocolo que es adoptada por cualquiera de ellos, o puede especificar que es adoptable solamente por una clase. Estos son ejemplos de ajuste al protocolo básico (MyProtocol
Conteúdo
Conforme a una clase a un protocolo
Muchos de los protocolos utilizados en los marcos de Cacao y táctiles son adoptadas por las clases en los marcos en parte porque en el Objetivo # 8208-C, los protocolos se utilizan normalmente sólo con las clases. Vas a ser capaz de ir más allá de las clases, pero, cuando estás escribiendo código que utiliza los marcos, podrás frecuencia tiene que escribir código que se ajusta a los protocolos para las clases.
Aquí hay algunas pautas a clases conforme a los protocolos:
Se especifica que una clase adopta un protocolo en su declaración, como en el siguiente:
class MiClase: MyProtocol {
Si usted adopta más de un protocolo, separar con comas, como en el siguiente:
MiClase clase: MyProtocol, MyProtocol2 {
Si su clase es una subclase de otra clase, su superclase aparece primero en la lista, como en el siguiente:
class MiClase: MySuperclass, MyProtocol2
Recuerde que Swift no soporta la herencia múltiple, por lo que sólo puede haber un superclase (o ninguno). Puede añadir protocolos a la lista si es necesario.
Si su clase es una subclase de una clase que adopta un protocolo, que debe ajustarse a ese protocolo en su propia clase a menos que la superclase ya se ajusta a ella. Usted no especifica este protocolo adoptado heredada en su propia declaración.
Después de haber indicado que su clase adopta un protocolo, ahora debe implementar todas las propiedades y métodos necesarios. (Es posible indicar que algunos de los métodos y las propiedades son opcionales, pero la configuración predeterminada es que todos ellos son necesarios.)
He aquí un ejemplo de una clase que se ajuste a un protocolo. Tenga en cuenta que myFunc es requerido por el protocolo, mientras que intval es una propiedad de clase que no tiene nada que ver con el protocolo:
class MiClase: MyProtocol {func myFunc () -> Cadena {return "Protocolo 1"} var intval: Int = 0}
Puede crear una variable (con var) O constante (con dejar) Que contiene una instancia de la clase con este código:
var miClase: MiClase = MiClase ()
A continuación, puede acceder a la clase de intval propiedad de instancia así como el método requerido por el protocolo myFunc:
myClass.intVal = 25myClass.myFunc ()
En este punto, se hace ninguna distinción entre los métodos y las propiedades requeridas por el protocolo y los que son simplemente parte de la clase.
Conforme a una estructura de un protocolo
Una estructura (struct) Adopta un protocolo de la misma manera como lo hace una clase - con código como el siguiente:
struct MyStruct: MyProtocol {func myFunc () -> Cadena {return "Protocolo 2"} intval var: Int = 0var Uno = 1VAR Dos = 2}
Puede declarar una variable que utiliza la estructura. A continuación, puede acceder a los miembros de la estructura, así como la función que se requiere por el protocolo:
myStruct var: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc ()
Conforme una enumeración de un protocolo
Las enumeraciones siguen el mismo diseño básico. Puede declarar una enumeración que adopta un protocolo junto con sus propios datos, como en el siguiente código:
enum MyEnum: MyProtocol {func myFunc () -> Cadena {return "Protocolo 3"} caso Onecase Twocase Threecase Cuatro}
A continuación, utilice la enumeración con una variable en el código:
var MyEnum: MyEnum = MyEnum.TwomyEnum.myFunc ()
Poniendo todo junto
El siguiente listado muestra estas muestras juntas.
// Zona de juegos - sustantivo: un lugar donde la gente puede playprotocol MyProtocol {func myFunc () -> Cadena} class MiClase: MyProtocol {func myFunc () -> Cadena {return "Protocolo 1"} var intval: Int = 0} var miClase : MiClase = MiClase () myClass.intVal = 25myClass.myFunc () struct MyStruct: MyProtocol {func myFunc () -> Cadena {return "Protocolo 2"} var intval: Int = 0var Uno = 1VAR Dos = 2} enumeración MyEnum: MyProtocol {func myFunc () -> Cadena {return "Protocolo 3"} caso Onecase Twocase Threecase Cuatro} var myStruct: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc () MyEnum var: MyEnum = MyEnum.TwomyEnum.myFunc ( )