Swift es un lenguaje de programación utilizado para escribir aplicaciones y juegos para iPhone, iPad, Mac, Apple Watch y más. Apple diseñó Swift explícitamente para obtener el rendimiento más rápido y eficiente de los dispositivos, y Swift 5 amplía su ya impresionante conjunto de características.
En este artículo, mostramos cómo usar Swift 5, explicamos por qué deberías hacerlo si tienes conocimientos de programación y todas las nuevas características de esta nueva versión del lenguaje.
Si eres un tanto principiante, te animamos a consultar el artículo sobre cómo aprender Swift 5. Échale un vistazo también a el mejor Mac para desarrollar aplicaciones.
Descripción general de Swift 5
Swift 5 es un lenguaje de programación desarrollado por Apple que permite a los desarrolladores crear aplicaciones para iOS, macOS, tvOS y watchOS.
La quinta versión fue lanzada junto con Xcode 10.2 en marzo de 2019. Aquí vamos a hablarte sobre las nuevas funciones de Swift 5, pero debes saber que el lenguaje Swift lleva ya un tiempo en el mercado: Swift 1.0 se lanzó en septiembre de 2014. Según Apple, Swift es hasta 2,6 veces más rápido que Objective C y hasta 8,4 veces más rápido que Python.
¿Por qué deberías desarrollar con Swift 5?
1) Swift es de código abierto. Esto significa que el código fuente que hay detrás de un programa o lenguaje de programación está disponible para el público en general. Los desarrolladores pueden inspeccionar, modificar y desplegar el programa donde lo deseen.
La página de Open Source de Apple menciona: “Apple cree que el uso de la metodología de código abierto hace que macOS sea un sistema operativo más robusto y seguro, ya que sus componentes centrales han estado sujetos a estrictos controles de revisión durante décadas”.
2) Swift es fácil de aprender. Apple desarrolló su lenguaje para que fuera fácil de utilizar. Para empezar, es un lenguaje ideal para principiantes, ya que la sintaxis es fácil de entender. Si ya has desarrollado software con anterioridad, encontrarás que la sintaxis y los conceptos de Swift se parecen mucho a los que ya usas.
3) Swift es rápido. Apple afirma que los algoritmos de búsqueda en Swift se completan hasta 2,6 veces más rápido que Objective-C y hasta 8,4 veces más rápido que Python.
4) Swift es seguro. Comprobarás que utiliza comandos modernos de programación que permiten mantener un nivel de seguridad extra, la requerida para el desarrollo de nuevas aplicaciones.
5) Playgrounds. Xcode viene con una función llamada ‘playground’ donde los programadores de Swift 5 pueden escribir código y ver los resultados de inmediato.
6) Swift 5 está preparado para el futuro al permitir desarrollar aplicaciones para diferentes plataformas: iOS, macOS, watchOS y tvOS.
7) Swift mejora con cada actualización. Swift 5 trajo la tan esperada estabilidad ABI, lo que significa que los futuros compiladores de Swift podrán compilar el código escrito en Swift 5 y versiones posteriores, y la migración a nuevas versiones de Swift será menos costosa.
Esto también significa que los proveedores de sistemas operativos podrán integrar Swift Standard Library en el sistema operativo para hacerlo compatible con todas las aplicaciones creadas con Swift 5 y las versiones más nuevas.
Cómo empezar con Swift 5
Para empezar a desarrollar aplicaciones para iOS, tan solo necesitas un Mac (MacBook, iMac o Mac mini) y un software gratuito llamado Xcode (versión 10.2 o superior). Sigue los pasos que te indicamos a continuación:
- Abre la Mac App Store en tu escritorio.
- Busca ‘Xcode’ en la barra de búsqueda.
- Haz clic en ‘Obtener’ junto al icono de Xcode.
- También puedes encontrar Xcode en la Mac App Store de tu navegador.
Compiladores online
Si no tienes pensado implementar tus aplicaciones, siempre puedes utilizar uno de los compiladores de Swift disponibles en la red. Es una manera de aprender y ejecutar código Swift.
- Swift Playground en línea es compatible con Swift 5 y te permite probar y ejecutar código.
- Repl.it tiene un compilador en línea que admite Swift 4.2 en el momento de redactar este artículo (julio de 2019).
Cómo escribir una aplicación sencilla en Swift
Abre Xcode y selecciona ‘Archivo> Nuevo> Proyecto’. Selecciona la aplicación de vista única de la lista de plantillas.
Introduce un nombre para tu aplicación o proyecto así como el nombre de la Organización (puede ser el nombre de tu compañía). El identificador de la organización suele ser la URL de tu empresa en orden inverso, por ejemplo, com.mycompany.myapp .
Seleccione Swift como el idioma y haz clic en ‘Siguiente’. Finalmente, selecciona la ubicación en tu Mac donde deseas que Xcode cree el proyecto.
Una vez creado el proyecto, el sistema te mostrará la siguiente pantalla:
Aquí, podrás desarrollar una aplicación simple, donde el usuario podrá introducir su nombre dentro de un campo de texto y recibir un simple saludo cuando presiona un botón.
Para comenzar, debes dirigirte a archivo Main.storyboard en el panel izquierdo. Verás aparecer una vista vacía. Haz clic en el botón redondo situado en la esquina superior derecha para abrir la biblioteca de objetos. Arrastra un campo de texto, etiqueta y pon el botón a la vista.
Selecciona el botón en la jerarquía de vistas y establece el título en ‘Generar saludo’ dentro del área de utilidades mostrado en el lateral derecho.
Haz doble clic en el archivo ViewController.swift . Se abrirá una ventana separada.
Ahora selecciona el campo de texto en la vista y mantén presionada la tecla ‘Ctrl’ para poder arrastrar hasta la parte superior de ViewController. Se te pedirá que crees un IBOutlet para el campo de texto. Llámalo ‘textField’.
Haz lo mismo con la etiqueta y nombrala como IBOutlet. También tendrás que hacer lo mismo con el botón, pero en lugar de arrastrar a la parte superior de la ViewController, arrastrala a la parte inferior para crear un método IBAction. Nombra el método ‘buttonTapped’.
Los IBOutlets se utilizan para acceder a los controles en el guión gráfico de nuestro código y los métodos de IBAction se utilizan para reaccionar ante eventos de botones como puedan ser las pulsaciones.
Agrega el siguiente código en el método buttonTapped de tu clase ViewController :
si se deja name = textField.text {
self.label.text = “Hello” + name
}
Así es como debería verse el archivo ViewController.swift después de estos cambios introducidos:
Ya estás listo para ejecutar la aplicación. Presiona el botón ‘Ejecutar’ y la aplicación se iniciará en el simulador.
Cuando el usuario agrega su nombre en el campo de texto y toca el botón, la etiqueta en la parte inferior mostrará ‘Hola’ junto con el nombre ingresado.
Swift 5 conceptos (Básico y Avanzado)
Usa ‘let’ para hacer una constante y ‘var’ para definir una variable. El valor de una constante no se puede cambiar una vez asignado; El valor de una variable puede cambiar. Los usuarios no siempre tienen que escribir explícitamente. Proporcionar un valor cuando creas una constante o variable permite al compilador interaccionar:
vamos constVar = 42
var numberVar = 27
El desarrollador también puede especificar el tipo. En el siguiente ejemplo, estamos declarando un entero.
var numberVar: Int = 27
Comentarios en Swift
Los comentarios en Swift pueden ser de dos tipos.
Línea sola:
// Esto es un comentario
Comentarios de líneas múltiples:
/ * Este es un
comentario multilínea * /
Toma de decisiones en Swift
La sintaxis de una sentencia if en Swift es la siguiente:
si boolean_expression {
/ * sentencias se ejecutarán si la expresión booleana es verdadera * /
}
Por ejemplo:
La sintaxis de una sentencia if … else en Swift 5 es la siguiente:
si boolean_expression {
/ * sentencias se ejecutarán si la expresión booleana es verdadera * /
} de lo contrario {
/ * sentencias se ejecutarán si la expresión booleana es falsa * /
}
Por ejemplo:
La sintaxis de una sentencia if … else if … else en Swift 5 es la siguiente:
if boolean_expression_1 {
/ * Se ejecuta cuando la expresión booleana 1 es verdadera * /
} else if boolean_expression_2 {
/ * Se ejecuta cuando la expresión boolean 2 es verdadera * /
} else si boolean_expression_3 {
/ * Se ejecuta cuando la expresión booleana 3 es verdadera * /
} else {
/ * Se ejecuta cuando ninguna de las condiciones anteriores es verdadera * /
}
Por ejemplo:
Cambiar la declaración
A continuación se presenta una sintaxis genérica de la instrucción Switch disponible en Swift 5. Aquí, si se utiliza la función de paso, se continuará con la ejecución del siguiente caso y luego saldrá de la instrucción Switch.
Cambiar expresión {
caso expresión1:
sentencia (s)
fallthrough / * opcional * /
case expresión2, expresión3:
sentencia (s)
fallthrough / * opcional * /
predeterminado: / * Opcional * /
declaración (s);
}
Por ejemplo:
Arrays
Cree matrices y diccionarios utilizando corchetes, es decir, [y], y acceda a sus elementos escribiendo el índice o la clave entre corchetes. La siguiente línea crea una matriz.
var arrayList = [“Swift”, “JavaScript”, “Java”, “PHP”]
Para acceder y modificar el segundo elemento de una matriz, podemos escribir directamente:
arrayList [2] = “React Native”
Para crear una matriz vacía, usa la sintaxis del inicializador.
var emptyArray = [String] ()
emptyArray = []
Los diccionarios
ocupaciones var = [“Steve”: “Desarrollador”, “Kate”: “Diseñador”,]
Para acceder y modificar cualquier valor para un diccionario podemos escribir directamente:
ocupaciones [“Steve”] = “CTO”
Para crear un diccionario vacío, usa la sintaxis del inicializador.
ocupaciones = [:]
Conjuntos
Los conjuntos en Swift son similares a los arreglos, pero solo contienen valores únicos.
var a: Set = [1,2,3,4,5,6,7,8,9,0]
Swift también introduce el tipo Optionals, que maneja la ausencia de un valor. Los opcionales dicen que “hay un valor y es igual a x” o “no hay un valor en absoluto”. Puedes definir un opcional con ‘?’ o ‘!’
var myString: String?
‘?’ Significa que el valor puede estar presente o ausente.
‘!’ significa que el valor puede ser nulo inicialmente, pero en el futuro, cuando se use, debe tener un valor, o generará un error de tiempo de ejecución.
Ningún signo significa que la variable no es opcional y debe asignársele un valor, o generará un error de compilación.
Funciones
A continuación se muestra la sintaxis para crear una función en Swift: el inputNum es el nombre del parámetro seguido del DataType, ‘createStr’ es el nombre de la función. ‘-> Cadena’ denota el tipo de retorno. La función toma Integer como entrada y lo convierte en String y lo devuelve.
func createStr (Number inputNum: Int) -> String
{
return ” (inputNum)”
}
La función se puede llamar usando la siguiente sintaxis:
createStr (Número: 345)
Clases
A continuación se muestra la sintaxis para crear un Class Car. Tiene una variable miembro opcional numOfPersons y una función displayDetails ()
class Car
{
var numOfPersons: Int?
func displayDetails () {
}
}
La instancia de la clase se puede crear utilizando la siguiente línea:
var myCar: Car = Car ()
La variable ‘numOfPersons’ se puede inicializar de la siguiente manera:
myCar.numOfPersons = 5
Extensiones
En Swift podemos ampliar la funcionalidad de una clase, estructura o tipo de numeración existente con la ayuda de extensiones. La funcionalidad se puede añadir con extensiones, pero de esta manera no es posible anular la funcionalidad.
En el siguiente ejemplo tenemos una clase de coche y estamos añadiendo una extensión al coche para añadirle otra propiedad. Al acceder a la propiedad ‘velocidad’, se puede acceder directamente como si perteneciera a la clase.
Tuples
The tipo Tupla es utilizado para agrupar múltiples valores en un solo valor compuesto. Aquí está la sintaxis de una declaración Tuple:
var TupleName = (Value1, value2,… any number of values)
Aquí está la declaración de Tuple:
var error501 = (501, “Not implemented”)
Nuevas características en Swift 5
Swift 5 nos trae cadenas en bruto, una característica que facilita la creación de cadenas que contienen comillas y barras invertidas sin necesidad de utilizar secuencias de escape como en versiones anteriores de Swift.
En las cadenas en bruto, las comillas y barras invertidas se interpretan literalmente como esos símbolos en lugar de ser interpretados como caracteres de terminación de cadena o de escape.
Para usar cadenas, sólo tienes que añadir # al principio y al final de la cadena:
Debido a que la barra invertida en las cadenas en bruto se interpreta como un símbolo, para utilizar la interpolación de cadenas en las cadenas en bruto hay que añadir otro # después del símbolo de la barra invertida:
Si necesitas usar la secuencia “# # juntos dentro de una cadena cruda, debes agregar ## al principio y al final de la cadena, como se muestra en la siguiente imagen.
Búsqueda de múltiplos enteros
En Swift 4.2 y versiones anteriores, para saber si un número era múltiplo de otro, era necesario usar el operador (%). Ahora en Swift 5, hay un método dedicado para eso, que hace que el código sea mucho más claro:
Manejo de futuros casos de enumeración
Las instrucciones de cambio en Swift deben ser siempre exhaustivas. Esto significa que siempre tienes que manejar todos los casos de enumeración o manejar solo casos específicos con el añadido del caso por defecto que manejan los demás casos:
El problema con este enfoque es que si en el futuro el desarrollador decide añadir otro caso a la lista, no habrá ninguna advertencia por parte del compilador de que el nuevo caso fue añadido. Esto significa que el nuevo caso será manejado como caso por defecto, lo cual no siempre es lo deseable.
Para solucionar este problema, se agregó un nuevo atributo @desconocido en Swift 5. Este atributo se utiliza junto con el caso por defecto.
Con el caso @desconocido por defecto en la sentencia switch, el compilador emitirá una advertencia si se agregó un nuevo caso al enumero en el futuro. De esta manera, el desarrollador puede decidir si manejar el nuevo caso o no.
Opcionales de anidados
Las opciones de anidados permite ser creados manejando código que lanza usando try? En Swift 5, el opcional anidado se convierte en un opcional regular. Esto coincide con el comportamiento de del condicional y el encadenamiento opcional.
En el ejemplo anterior, puedes ver que la variable modelo es de tipo String? y no String?? como en Swift 4.2.
Tipo de resultado en la Librería Estándar
En Swift 5, el tipo ‘Resultado’ se añadió a la Librería Estándar. El tipo ‘Resultado’ te ofrece una forma limpia y sencilla de manejar los errores en código asíncrono. Se implementa como una lista con casos de éxito y fracasos.
Ambos casos se implementan utilizando genéricos. El caso de éxito puede tener un valor asociado de cualquier tipo, mientras que el caso de fallo debe tener un valor asociado que se ajuste al protocolo de error. Aquí hay un ejemplo que demuestra el uso del tipo Resultado:
En el ejemplo anterior, hemos implementado un ApiClient simple que obtiene nombres de una URL. Ten en cuenta que el segundo parámetro de la función fetchNames es un cierre de finalización que acepta un tipo de ‘Resultado’. El tipo ‘Resultado’ en nuestro ejemplo utiliza [String] para el caso de éxito y ApiError para el caso de fallo.
Ahora, podemos usar el código de arriba de esta manera:
Los mejores lugares para aprender programación con Swift 5
¿Necesitas aprender el lenguaje de desarrollo Swift 5 de Apple? Te ayudamos con una serie de consejos y recursos de la red, e incluímos cursos completos gratuitos y de pago.
Aprende a escribir aplicaciones para iPhone, iPad, Apple Watch y Mac con las novedades de Swift 5. Consulta en este artículo los lugares y recursos más interesantes para aprender programación con Swift 5.