¿Qué es Combine y para qué sirve?
\nCombine es un framework de Apple para programación reactiva, presentado en 2019 junto con iOS 13. Proporciona una API declarativa en Swift para procesar eventos a lo largo del tiempo. Combine permite combinar operadores de procesamiento de eventos asíncronos en cadenas de procesamiento de datos (pipeline).
\nLa tarea principal de Combine es simplificar el trabajo con operaciones asíncronas: solicitudes de red, notificaciones, KVO (Key-Value Observing), temporizadores, delegados y funciones callback. En lugar de mecanismos dispersos, Combine ofrece una interfaz unificada basada en Publisher (publicador) y Subscriber (suscriptor).
\nConceptos clave:
\n- \n
- Publisher — fuente de datos que puede enviar valores y finalizar (con éxito o con error). \n
- Subscriber — receptor de datos que reacciona a los eventos del Publisher. \n
- Operator — método que transforma, filtra o combina flujos de datos. \n
- Subscription — conexión entre Publisher y Subscriber que gestiona el flujo de datos. \n
Combine está estrechamente integrado con SwiftUI y Foundation, lo que lo hace indispensable para las aplicaciones iOS modernas.
\n\nInstalación
\nCombine es un framework integrado de Apple. Para usarlo no es necesario instalar paquetes adicionales a través de CocoaPods, SPM o Carthage. Está disponible desde iOS 13, macOS 10.15, tvOS 13 y watchOS 6.
\nPara empezar a usar Combine, basta con importarlo en un archivo Swift:
\nimport Combine\nSi usas Swift Package Manager para gestionar dependencias, Combine ya está incluido en la biblioteca estándar. Para proyectos que soporten versiones anteriores del sistema operativo, puedes usar OpenCombine, una implementación open-source de Combine.
\nInstalación de OpenCombine mediante SPM:
\n// En Package.swift\ndependencies: [\n .package(url: "https://github.com/CombineOpenSource/Combine.git", from: "0.5.0")\n]\n\nInicio rápido con ejemplo de código
\nVeamos un ejemplo muy simple: crear un Publisher a partir de un array y suscribirnos a él.
\nimport Combine\n\n// 1. Creamos un Publisher a partir de un array\nlet publisher = [1, 2, 3, 4, 5].publisher\n\n// 2. Creamos un Subscriber\nlet subscriber = Subscribers.Sink<Int, Never>(\n receiveCompletion: { completion in\n print("Finalizado: \\(completion)")\n },\n receiveValue: { value in\n print("Valor recibido: \\(value)")\n }\n)\n\n// 3. Nos suscribimos\npublisher.subscribe(subscriber)\nSalida en consola:
\nValor recibido: 1\nValor recibido: 2\nValor recibido: 3\nValor recibido: 4\nValor recibido: 5\nFinalizado: finished\nUna forma más idiomática usando el operador sink:
import Combine\n\nlet cancellable = [1, 2, 3, 4, 5].publisher\n .sink(receiveCompletion: { print($0) },\n receiveValue: { print($0) })\nNota: sink devuelve un AnyCancellable. Debes conservarlo, de lo contrario la suscripción se cancelará inmediatamente al salir del ámbito.
Métodos/funciones principales
\n\n1. sink(receiveCompletion:receiveValue:)
\nQué hace: Crea un suscriptor que recibe todos los valores y la finalización del Publisher. Es la forma más sencilla de suscribirse a un flujo.
\nParámetros:
\n- \n
receiveCompletion— closure que se llama al finalizar (con éxito o error). Recibe unSubscribers.Completion<Failure>. \n receiveValue— closure que se llama al recibir cada nuevo valor. \n
Ejemplo:
\nlet cancellable = Just("Hell También en la biblioteca
Autorización y autenticación en JavaScript (Node.js): guía completa
Trabajo con fechas en JavaScript (Node.js): bibliotecas populares
Trabajo con archivos ZIP en Java: guía completa de java.util.zip
Crypto-js para JavaScript (Node.js): guía completa con ejemplos