
Aprende los conceptos básicos de la programación asíncrona y cómo se diferencia del modelo tradicional de desarrollo.
Combine, la librería de programación declarativa asíncrona que te permitirá gestionar de una forma más eficiente tus flujos de trabajo en asincronía. Descubre en qué consiste.
El patrón sobe el que se construye Combine son los futuros y las promesas. Descubre qué son y cómo funcionan.
Los tres elementos que dan toda su funcionalidad a Combine son los publicadores, operadores y suscriptores. Veamos en qué consisten y cómo funcionan para que todo en Combine encaje en un plan sin fisuras.
Los operadores nos permiten trabajar con el contenido de la emisión del publicador hasta que llega al suscriptor. Veamos qué tipos hay y qué podemos hacer con ellos.
Aprende las bases de la programación y a cómo trabajar con los closures como parámetros en una función con Swift.
El tipo Resultado es un elemento esencial para trabajar tanto en modo síncrono como asíncrono. Nos permite tener en un mismo tipo de dato, el valor de éxito de un resultado, así como su posible error. Aprendamos cómo funciona.
Es imposible aprender a usar Combine y sus operadores si no sabemos qué son y cómo funcionan las funciones de orden más alto de la programación funcional. Veamos las más representativas y su imprescindible funcionalidad.
Los futuros son el tipo Resultado asíncrono y las promesas la manera que conectan con el código síncrono. El elemento base esencial de Combine. Veámoslo en detalle y aprendamos cómo funcionan.
Los publicadores son el punto de inicio de toda nuestra cadena de trabajo con Combine. Vamos a aprender a usarlos y entender cómo funcionan.
Los operadores nos permiten trabajar con lo que emite un publicador hasta llegar al suscriptor. Evaluaciones, transformaciones, filtrados y un sin fin de operaciones que nos proporcionan una potencia increíble.
Es imprescindible aprender el ciclo de vida de los suscriptores y cómo se retienen en memoria para que puedan seguir ejecutándose dentro de un proceso asíncrono. Retener un suscriptor también retendrá a su correspondiente publicador.
Los sujetos y subjects son elementos que actúan como publicadores y nos permiten personalizar nuestro flujo de trabajo. Veamos cómo funcionan los de valor actual, que unen el paradigma imperativo con el declarativo.
Los sujetos que sí pertenecen al paradigma de la programación declarativa son los de paso a través. Nos permiten crear sujetos que no tienen valor de inicio ni guardan su último valor publicado. Veamos cómo funcionan con algunos ejemplos.
Las suscripciones pueden cancelarse para que así aunque un publicador siga emitiendo, nosotros ya no lo escuchemos. Vamos a aprender cómo hacer esto y controlar de forma más granular nuestro flujo de trabajo con Combine.
Con este tipo de operadores podremos convertir cualquier dato que entre desde el publicador, tanto el valor correcto como el de error. Aprende a transformar un dato en otro e incluso un publicador en otro.
Con este tipo de operadores podremos filtrar lo que llega desde el publicador y hacer una selección mucho más clara de cualquier dato que se emita antes de llegar al suscriptor o descartarlo porque no nos sea útil.
Con este tipo de operadores podremos combinar los que emiten varios publicadores, compartir sus resultados y aprovechar de una forma más eficiente el trabajo de cada uno de nuestros componentes.
Las emisiones de un publicador no dejan de ser una secuencia de datos, emitidos de forma asíncrona. Vamos a aprender a trabajar con esta secuencia de datos, a recopilar resultados u obtener emisiones concretas dentro del flujo completo.
Además de todos los operadores más comunes que podemos usar, existen las versiones de tipo try de cada uno de ellos. Gracias a ellos, podremos lanzar errores con el uso de throw o evaluar operaciones try sin el flujo do-try-catch. Vamos a ver algunos ejemplos prácticos de uso.
Estamos ante una API declarativa y por lo tanto su capacidad para ser ejecutada en modo de depuración es más limitada por las vías tradicionales. Por eso existen operadores pensados específicamente para depurar el código y saber qué se está emitiendo en cada punto de nuestro stream.
Vamos a probar cómo Combine se integra con los frameworks Cocoa y Cocoa-Touch, así como la librería de fundación de Swift. Comenzamos probando una implementación con uso de futuros, de una recuperación de un dato de red, para entender bien los conceptos antes de adentrarnos más.
Entramos de lleno en Combine y en la implementación que tiene la API de URLSession para trabajar directamente con publicadores.
Una nueva forma de trabajar con la red que una vez domines, será tu única manera de descargar cualquier cosa en tu app.
Ya sabemos como descargar cualquier cosa de la red de una forma más práctica, pero: ¿cómo gestionamos los posibles errores?. Veamos un ejemplo completo que nos permita estar seguros de cómo bajar datos y controlar cualquier posible error que pudiera ocurrir en dicho proceso.
La integración con el centro de notificaciones de Cocoa y Cocoa-Touch, es una de las implementaciones más prácticas con Combine. Descubre cómo puedes observar cualquier Post, directamente con un publicador e incluso tratar los datos que acompañan a la notificación en cada emisión.
Otra integración de Cocoa y Cocoa-Touch con Combine son los Timers. Descubre cómo implementarlos mediante publicadores para que cada vez que expire, obtengamos una señal a través de un publicador que podamos gestionar.
Combine también funciona contra las propiedades de cualquier objeto de Objective-C que sea hijo de NSObject. Vamos a aprender cómo implementar el patrón de observadores de valores clave (KVO) para recibir una señal de un publicador, en una forma similar a lo didSet de Swift.
Combine es la API que permite a SwiftUI usar su propia arquitectura: MVVM. Vamos a ver un ejemplo simple de cómo los publicadores se integran en distintos componentes para emitir las señales que harán que SwiftUI funcione.
Ponemos a prueba todo lo que sabemos de Combine para recuperar datos a distintos niveles en una única llamada. La prueba definitiva para comprender el potencial de esta API de programación asíncrona declarativa.
Otra prueba para medir la capacidad de la API frente a tareas que hasta ahora eran extremadamente tediosas. Recuperamos un array completo de imágenes en una única llamada y las mostramos en una UI con SwiftUI.
¿Programación asíncrona? Suena complejo. Lo es. Y el hecho que pueda facilitarse o no depende de la API que podamos usar para resolver nuestro problema. ¿Qué opción elegir? Sin duda, lo mejor siempre es ir a lo nativo y Apple tiene una excelente solución presentada en 2019 junto a la versión 13 de iOS: Combine.
Combine es una API cerrada de Apple, de programación asíncrona, funcional, declarativa y reactiva. Desarrollada de forma nativa en Swift, es el corazón del patrón MVVM que podemos usar en SwiftUI (también en UIKit).
Esta API se divide en 3 elementos fundamentales: publicadores, operadores y suscripciones. Coge el concepto de los futuros y las promesas que algunos ya usan en Swift con librerías de terceros y lo multiplica exponencialmente creando la forma más práctica, potente y versátil de programación asíncrona que puedes encontrar en cualquier plataforma.
Reinventa tu código y pierde el miedo a los procesos asíncronos, consiguiendo lo más complejo de la forma más fácil.
Con nuestro propio programa formativo único, hemos conseguido que poco a poco, vayas entendiendo desde la base cada pequeño concepto y funcionamiento de la API Combine, para traerla hasta ti de la forma más asequible y que consigas ir más allá con tus programas y desarrollos en Swift. Incluyendo una pequeña introducción a la programación funcional en Swift.
No dejes pasar esta oportunidad y empieza hoy "Programación Asíncrona con Combine" de AC Academy.