Se declaran con la palabra clave extension.
extension NombreTipo {
// nuevas funcionalidades a añadir
}
extension puede extender un tipo para que adopte uno más protocolos.
extension NombreTipo: ProtocoloUno, ProtocoloDos {
// implementación de los protocolos requeridos van aquí
}
Si se define una extension para añadir nuevas funcionalidades a un tipo existente, la nueva funcionalidad estará disponible para todas las instancias existentes de ese tipo.
Propiedades Calculadas
En este ejemplo se añaden cuatro propiedades calculadas. Nuevas propiedades que multiplica por 2 y suma 2, multiplica por tres y suma 3 al valor indicado.
extension Double {
var porDos: Double {
return self * 2
}
var masDos: Double {
return self + 2
}
var porTres: Double {
return self * 3
}
return self * 3
}
var masTres: Double {
return self + 3
}
10.2 es un double que puede obtener esas propiedades calculadas.
let valorPorDos = 10.2.porDos
println("10.2 * 2 = \(valorPorDos)")
// Imprimirá 10.2 * 2 = 20.4
let valorPorTres = 10.2.porTres
println("10.3 * 3 = \(valorPorTres)")
// Imprimirá 10.3 *32 = 30.9
También es posible realizar operaciones matemáticas.
let sumaValores = 1.0.porDos + 1.0.porTres
El resultado de suma varlores será de 5 ya que (1 * 2 + 1 * 3 = 5 )
Inicializaciones
extension pueden añadir inicializaciones a tipo existentes.
struct Distancia {
var metros = 0.0
}
struct Temperatura {
var grados = 0.0
}
struct Ciudad {
var distancia = Distancia()
var temperatura = Temperatura()
}
Se puede extender la estructura Ciudad para indicar valores de inicialización.
extension Ciudad {
init(distanciaIn: Distancia, temperaturaIn: Temperatura) {
// se calculan valores temporales
let distanciaKm = distanciaIn.metros * 1000;
let temperaturaMasUno = temperaturaIn.grados + 1;
// para después inicializar
self.init(distancia: Distancia(metros:distanciaKm),
temperatura: temperaturaMasUno)
}
}
No hay comentarios:
Publicar un comentario