/*
Los nuevos protocolos son muy parecidos a las interfaces en lenguajes de programación, aunque solo a simple vista. En Swift podemos hacer uso de los protocolos para dar increíble poderes de personalización a nuestras clases y tipos de valor.
Digamos que deseamos agregar un pequeño método que permita animar vistas de una posición a otra. Siguiendo la filosofía de Swift, empezamos creando un protocolo:
*/
protocol Movable
{
func moveTo(x x: CGFloat, y: CGFloat)
}
/*
Siendo personas sensatas que no quieren repetir código por todos lados, vamos a utilizar extensiones para crear una implementación por defecto para este protocolo.
*/
extension Movable where Self: UIView
{
func moveTo(x x: CGFloat, y: CGFloat)
{
UIView.animateWithDuration(1.5, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.0, options: .BeginFromCurrentState, animations: {
self.transform = CGAffineTransformMakeTranslation(x, y)
}, completion: nil)
}
}
/*
Con estas pocas lineas de código hemos implementando la posibilidad de mover cualquier clase de tipo “UIView” que también contenga el protocolo “Movable”.
Mmmm, ¿por qué es esto mejor?
Inmediatamente salta a la mente — ¿por qué no usar herencia? —.
La respuesta sería —libertad —.
Al usar protocolos tenemos total libertad de escoger quién tendrá acceso al método “moveTo”, simplemente si queremos hacer que todos los botones de nuestra app sean “movibles”, haríamos esto:
*/
extension UIButton : Movable { }
//Recrear la linea anterior usando subclases sería el equivalente de un lápiz en el ojo, así de atractivo.
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.