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