Reseñas

SwifterSwift, la colección de extensiones definitiva para Swift 3

Omar Albeik, un nombre que seguramente no te sonará. Un desarrollador que se ha convertido, por méritos propios, en todo un ejemplo a seguir de superación personal, además de responsable de una de las librerías más famosas en la web GitHub: SwifterSwift, una colección de extensiones que mejoran la productividad a la hora de trabajar en Swift 3 con increíbles y muy prácticas funciones integradas en los tipos nativos, gracias al uso de extensiones.

Omar actualmente trabaja para Udacity, la conocida página de formación a nivel internacional, y se hizo experto en desarrollo para iOS con Swift en uno de los nanogrados que ofrece. Una persona que en menos de dos años y con la formación adecuada ha pasado de no conocer nada de desarrollo a ser trending número 1 en GitHub gracias al proyecto que hoy os presentamos. Un proyecto con más de 2.500 estrellas en su repositorio, más de 400 extensiones nativas y la posibilidad de aumentar tu productividad trabajando con Swift mucho más de lo que puedas imaginar.

La historia de Omar

Debido a la guerra, Omar tuvo que abandonar Aleppo, su ciudad natal en Siria, e instalarse en Estambul donde tuvo que salir adelante aprendiendo turco en menos de un año. A inicios de 2015 y con la necesidad de re-inventarse a sí mismo de alguna manera, decidió que estudiaría programación. Con 25 años tener que esperar 4 años para obtener su carrera no le apetecía mucho pero se matriculó en la Universidad de Bahçeşehir, aunque tuvo la idea de realizar cursos online para progresar más rápidamente y de una manera más eficiente. Así que se puso a estudiar el lenguaje Swift que le gustó, consiguiendo sacar su primera app: un juego casual en SpriteKit que hizo de código abierto llamado Spinny. Tras esto tuvo claro a lo que quería dedicarse y se apuntó al nanogrado de Udacity de desarrollo iOS que terminó en diciembre de ese año con un gran proyecto de una app de Nutrición llamada Nutrition Cal.

Omar Albeik

A partir de ahí, Udacity le abrió los ojos y entendió que la formación era lo más importante, por lo que hizo los nanogrados de desarrollo web, de desarrollo en Android y ahora está estudiando su cuarto grado de programación web avanzada. En mayo de 2016 supo que Udacity iba a conceder becas del nanogrado de Android completo a los 100 primeros que terminaran el grado básico, así que lo hizo en solo 5 días. Por lo tanto pudo acceder al nanogrado completo que tiene guardado para hacer tras terminar el de programación web avanzada. Y mientras, en marzo de 2016, comenzó trabajando con la propia Udacity como ingeniero a distancia y ahora está incorporado a un proyecto de la plataforma llamado Blitz.

Sin duda, todo un ejemplo a seguir en donde todo lo que aprende lo pone en práctica sacando lo mejor de sí mismo. Un ejemplo de cómo una persona con una situación personal muy dura, pudo re-inventarse y conseguir un puesto dentro de la propia Udacity como ingeniero de desarrollo. Como dice el título del artículo que tenéis más abajo, escrito por el propio Omar contando su historia, de 0 a desarrollador Swift número 1 de GitHub en menos de 2 años.

SwifterSwift

SwifterSwift tiene multitud de opciones e incluso se atreve a proporcionar extensiones para clases de Cocoa Touch compatibles con iOS o tvOS. Funciona en Swift 3 y requiere Xcode 8.1 o superior. Puede instalarse en tu proyecto bajando directamente la librería desde GitHub o usando los populares gestores CocoaPods o Carthage e incluso soporta Swift Package Manager de Swift de código abierto, pudiendo usarse por lo tanto incluso en Swift para Linux u otros sistemas.

Con SwifterSwift se incorporan automáticamente funciones no presentes en Swift por defecto que mejoran enormemente tu productividad y al ser extensiones, no notarás que son añadidos pues se incorporan directamente a los tipos nativos del sistema. Hay opciones para colecciones como arrays, tipos cadenas, numéricos, de fechas, tipos de CoreGraphics como CGFloat o CGPoint y lo más importante, para los tipos nativos de Cocoa Touch para apps como UIImage, UILabel, UITextField. De hecho, incluso los tipos de mayor nivel como UIView o UITableView también tienen nuevas funciones que mejoran su uso.

Estos son algunos ejemplos de las funciones que ofrece esta librería:

Extensiones de arrays:

// Borrar duplicados de un array
[1, 2, 3, 1, 3].removeDuplicates() -> [1, 2, 3]

// Desordenar un array
["h", "e", "l", "l", "o"].shuffled = ["e", "l", "o", "l", "h"]

// Devolver un elemento aleatorio de un array
[1, 2, 3, 4, 5].randomItem -> 3

Extensiones para tipos Fecha (Date):

// Accede a los componentes de la fecha o asígnalos
date.hour = 14

// Suma un mes a la fecha actual
Date().add(.month, value: 1)

// Crea fecha por sus componentes
let date = Date(year: 2016, month: 8, day: 15) // el resto de componentes se fijan a la fecha actual
let date = Date(hour: 9, minute: 18, second: 1) // el resto de componentes se fijan a la fecha actual

// Convierte fechas en cadenas de una manera muy simple sin formateadores
Date().dateString(ofStyle: .medium) -> "Aug 26, 2016"
Date().timeString(ofStyle: .short) -> "12:55 AM"
Date().dateTimeString() -> "Aug 26, 2016, 12:55:24 AM"

Extensiones de cadenas

// Total de veces que una subcadena está en una cadena
"hello world".count(of "o", caseSensitive: false) -> 2

// Devuelve una cadena sin espacios ni saltos de línea
"\n Hello   ".trimmed -> "Hello"

// Comprueba si una cadena es un email válido
"omaralbeik@gmail.com".isEmail -> true

// Comprueba si una cadena tiene al menos una letra y un número
"123abc".isAlphaNumeric -> true

// Crea cadenas de contenido aleatorio
String.random(ofLength: 10) -> "AhEju28kNl"

// Accede a las posiciones de la cadena como si fueran arrays
"Hello"[2] = "l"

// Convierte cadenas en números
"12.12".toDouble -> 12.12

Extensiones para números:

// Calcula la raíz cuadrada de un número
√ 9 = 3

// Calcula el valor de la potencia de un número
5 ** 2 = 25

// Consigue el resultado múltiple de sumar y restar un número
5 ± 2 = (3, 7)

// Recupera un número aleatorio en un rango
Int.randomBetween(min: 1, max: 10) = 6

UIView Extensions

// Anima vista con un closure de completado
view.fadeIn(duration: 1, completion:((Bool) -> Void)?)
view.fadeOut(duration: 1, completion:((Bool) -> Void)?)
view.rotate(byAngle 90, ofType type: .degrees, animated: true, duration: 1, completion: { print("done") })
view.rotate(toAngle -3, ofType type: .radians, animated: false, duration: 1, completion: nil)
view.scale(byOffset: 4, animated: true, duration:1)
view.shake(direction: .horizontal, duration: 1, animationType: .easeOut)

// Recupera una captura de una vista como imagen
let image = view.screenShot

CGPoint Extensions

// Consigue la distancia entre dos puntos
point1.distance(from point2) = 12.45

// Multiplica un punto por un valor escalar
result = 5 * point

UIAlertController

// Crea una alerta para una cadena o un error
let alert = UIAlertController(title: "Couldn't sign in", message: "Invalid username or password!")
let alert = UIAlertController(title: "Error", error: Error)

// Muestra la alerta
alert.show()

UIButton

// Pon el título, el color del mismo o la imagen de un botón para todos los ESTADOS a la vez
button.setTitleForAllStates("Login")
button.setTitleColorForAllStates(UIColor.blue)
button.setImageForAllStates(UIImage(named: "login"))

UIImage

// Recorta imágenes
let croppedImage = image.cropped(to CGRect)

// Crea imágenes desde un color
let image = UIImage(color: UIColor, size: CGSize)

// Escala una imagen a un tamaño concreto
let scaledImage = image.scaled(toHeight: CGFloat)
let scaledImage = image.scaled(toWidth: CGFloat)

// Comprime imágenes
let compressedImage = image.compressd(quality: 0.3)

UITableView

// Devuelve el index path de la última fila de una sección
tableView.indexPathForLastRow(in section: 2)

// Desplázate al inicio o al final de una tabla
tableView.scrollToBottom(animated: true)
tableView.scrollToTop(animated: true)

Estos son solo algunos ejemplos de los más de 400 métodos que tienen las diferentes extensiones de esta interesante librería que os invitamos a probar que seguro mejorará mucho vuestra productividad.

Solo tenéis que acceder al enlace al final de la página donde está el repositorio de GitHub y bajarlo o seguir las instrucciones de instalación para los gestores de repositorios. Y espero que la historia de Omar os inspire como ha sucedido conmigo al leerla y he pensado que era interesante compartirla con todos vosotros. Un saludo y Good Apple Coding.

SwifterSwift | Repositorio en GitHub
From 0 to GitHub’s #1 Trending Swift Developer in Less than 2 Years | Artículo en Medium

Etiquetas

Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.
Botón volver arriba
Cerrar
Cerrar