miércoles, 8 de octubre de 2014

Swift y Protocolos (Protocols)

Swift y Protocolos (Protocols)

Un protocolo define métodos, propiedades y otros requerimientos que debe ser  implementados en las clases que los adopten en su definición.

El protocolo no contiene implementación. 

El protocolo puede ser adaptado por una clase, structure o enumeration,  para que implemente los requerimientos indicados por el protocolo.

Definir un Protocolo

protocol PrimerProtocolo {
   // contenido del protocolo
}


Para que un tipo definido adopte un protocolo escribir el nombre del protocolo después del nombre del tipo separado por una coma

Varios protocolos pueden ser incluidos separados por una coma.

struct Informacion: PrimerProtocolo, SegundoProtocolo {

  // en este caso implementará los requerimientos de los dos protocols

}

Si la clase hereda de una superclase, el nombre de la superclase tiene que estar delante de cualquier nombre de protocolo

class ClaseUno: SuperClase , PrimerProtocolo, SegundoProtocolo {

}

Propiedades Requeridas

Solo especifica el nombre y el tipo.

El protocolo también especifica cuando cada propiedad debe de ser gettable or gettable y settable.

Las propiedades son siempre declaradas como variables con el prefijo var.

Gettable y settable se indican con { get set } después de declarar el tipo, y el Gettable se indica escribiendo { get }

protocol PrimerProtocolo {

  var debeDeSerSetteable: Int { get set }

 var noDebeSerSetteable: Int { get }

}

Un ejemplo  de un protocolo con una simple instancia propiedad.

protocol MarcaModelo {
   var marcaModelo: String { get }
}

Ejemplo de una simple estructura que adopta el protocolo MarcaModelo.

struct Coche: MarcaModelo {
   var marcaModelo: String
}

let miCoche = Coche(marcaModelo: "Seat")

// miCoche.marcaModelo contiene "Seat"

Cada instancia de Coche tiene una propiedad llamada marcaModelo, que es de tipo String.



Un ejemplo que adopta el protocolo MarcaModelo.


class CocheInformacion: MarcaModelo{

  var cilindrada: String ?
  var nombre: String

 // método de inicialización

  init(nombre: String, cilindrada: String ? = nil) {

    self.nombre = nombre
    self.cilindrada = cilindrada

 }

 // establecer el contenido de marcaModelo

 var marcaModelo: String {

    return (cilindrada != nil ? cilindrada ! + ":") + nombre

 }

}

// ****************  Final de la definición de CocheInformacion



Cada CocheInformacion almacena un atributo nombre obligatorio y un opcional llamado cilindrada.

marcaModelo utilizar cilindrada si el valor existe.

var miCoche = CocheInformacion(nombre: "Seat", cilindrada: "120cc")

Ahora  miCoche.marcaModelo contiene "120cc Seat"


Próximo contenido: Métodos Requeridos




No hay comentarios:

Publicar un comentario