Combine para Swift: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Combine y para qué sirve?

\n

Combine 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).

\n

La 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).

\n

Conceptos 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
\n

Combine está estrechamente integrado con SwiftUI y Foundation, lo que lo hace indispensable para las aplicaciones iOS modernas.

\n\n

Instalación

\n

Combine 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.

\n

Para empezar a usar Combine, basta con importarlo en un archivo Swift:

\n
import Combine
\n

Si 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.

\n

Instalació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\n

Inicio rápido con ejemplo de código

\n

Veamos un ejemplo muy simple: crear un Publisher a partir de un array y suscribirnos a él.

\n
import 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)
\n

Salida en consola:

\n
Valor recibido: 1\nValor recibido: 2\nValor recibido: 3\nValor recibido: 4\nValor recibido: 5\nFinalizado: finished
\n

Una forma más idiomática usando el operador sink:

\n
import Combine\n\nlet cancellable = [1, 2, 3, 4, 5].publisher\n    .sink(receiveCompletion: { print($0) },\n          receiveValue: { print($0) })
\n

Nota: sink devuelve un AnyCancellable. Debes conservarlo, de lo contrario la suscripción se cancelará inmediatamente al salir del ámbito.

\n\n

Métodos/funciones principales

\n\n

1. sink(receiveCompletion:receiveValue:)

\n

Qué 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.

\n

Parámetros:

\n
    \n
  • receiveCompletion — closure que se llama al finalizar (con éxito o error). Recibe un Subscribers.Completion<Failure>.
  • \n
  • receiveValue — closure que se llama al recibir cada nuevo valor.
  • \n
\n

Ejemplo:

\n
let cancellable = Just("Hell                    

Recommendations