En RxSwift el conjunto de Operadores y Subjects es un marco para interactuar con el lenguaje de programación Swift. Este marco proporciona un vocabulario común para ciertas tareas utilizadas repetidamente en diferentes lenguajes de programación.

Puedes preguntar «¿Por qué usar RxSwift?«. Aunque la respuesta es sencilla: Simplemente simplifica tu trabajo, te sugiero consultar mi otro artículo para que puedas saber las razones de por qué usarlo.

En lugar de notificaciones, que son difíciles de probar, podemos usar señales. En lugar de delegados, que ocupan un lugar importante en el código, podemos escribir bloques y eliminar múltiples interruptores.

Uso de operadores y subjects en RxSwift

Los operadores y subjects en RxSwift son un conjunto de bibliotecas para trabajar con código asíncronos, que presenta eventos en forma de secuencias con la capacidad de suscribirse a ellos.

Hoy nos centraremos en los componentes de código de RxSwift.

Operadores de Transforming, Filtering y Combining

Los operadores permiten realizar operaciones en secuencias y eventos, se agrupan en categorías según su funcionalidad.

Operadores de Transforming

Los operadores transformadores se utilizan para modelar los datos emitidos por observables a fin de cumplir con los requisitos de los suscriptores.

Map

El operador map funciona de manera similar al operador de map estándar de Swift, excepto que funciona en observables. El operador map te permite aplicar una función a cada elemento emitido por un observable.

RxSwift Map

En este diagrama, la secuencia observable que contiene los valores 1, 2 y 3 pasa a través del operador de mapa que multiplicará cada valor por 10. Luego devuelve la secuencia observable 10, 20 y 30.

RxSwift Map

FlatMap

Es posible que una secuencia observable contenga observables a los que puede suscribirse.

El operador FlatMap es utilizado para alcanzar cada elemento de una secuencia y tratar con la secuencia interna observable que puede estar contenida en los elementos.

flatMap

El operador FlatMap elimina los múltiples niveles de observables anidados y, en cambio, los aplana en una sola secuencia observable. Mucho más fácil de trabajar.

flatMap

FlatMapLatest

El operador FlatMapLatest comparte muchas similitudes con el operador FlatMap. La diferencia entre ellos es que FlatMapLatest solo produce elementos del observable más reciente.

Esto significa que FlatMapLatest cambia su monitoreo al más reciente observable e ignora las emisiones de observables anteriores.

flatMapLatest

Nota: Ya no recibimos nuevos eventos en John. Entonces el “Dodge” que agregamos a John.car.accept no se está imprimiendo

Este operador es útil si solo deseas recibir actualizaciones de los observables más recientes y cancelar la suscripción de los antiguos.

Operadores de Filtering

El filtrado es una característica clave que ahorra muchas líneas de código. Estos operadores te permiten filtrar los datos de varias maneras para que solo pase los datos que deseas que reciban tus suscriptores.

Filter

La forma en que funciona el operador Filter, es que toma un predicado como argumento. El predicado es como una restricción condicional que debe cumplir cada uno de los elementos emitidos por el observable.

De esta manera, el predicado se aplica a todos los elementos y determina si cada uno de ellos está permitido a los suscriptores o no.

RxSwift Filter

En este caso, Filter solo dejará pasar elementos cuyos valores sean mayores que 10. Estos alcanzarán el siguiente operador, mientras que el resto de los elementos se descartarán.

filter

Skip y SkipWhile

Estos dos operadores tienen el propósito de omitir datos en algún momento u otro.

El operador Skip, nos dice cuántos elementos debemos ignorar. Todos los elementos que vienen después se permiten a los suscriptores.

Así, Skip(2) ignorará los dos primeros elementos entrantes y emitirá todos los demás elementos.

Con el operador SkipWhile, pasa una condición que, siempre que se evalúe como verdadero, ignorará los elementos entrantes. Cuando se evalúa como falso, todos los elementos que vienen después se permitirán.

SkipWhile

Operadores de Combining

Los operadores de combinación sirven para unir secuencias observables en varias formas.

Merge

Este operador Merge fusiona elementos de la secuencia de múltiples observables. Esta salida actúa como un solo observable.

merge

En el diagrama vemos que cada emisión de cualquiera de las fuentes observables se emite en el objetivo observable a medida que ocurren. La implementación de esto es bastante sencilla:

Merge

CombineLatest

CombineLatest se utiliza para generar un valor que depende de elementos de diferentes observables. Cuando uno de los dos observables de origen emite un elemento, el operador toma los últimos valores de ambos observables de origen.

Luego, los elementos se pasan a través de un cierre que determina cómo combinarlos.

CombineLatest

combineLatest

Este operador es útil cuando se desea sincronizar datos del servidor con datos almacenados en caché local.

Zip

Puede resultarte molesto que CombineLatest repita muchos de los mismos elementos, ya que no espera a que todos los observables de origen proporcionen un nuevo elemento.

Bueno, estás de suerte, porque eso es exactamente lo que Zip hace. También proporciona un cierre a este operador, similar a CombineLatest, que especifica cómo combinar los elemento

Zip

Zip

El operador Zip combina las emisiones de múltiples Observables a través de un cierre específico y emite elementos únicos para cada combinación en función de los resultados de este cierre.

Subjects para RxSwift.

Los sujetos son observables que te permiten agregar nuevos elementos dinámicamente, y tener secuencias observables sin una cantidad fija de elementos. RxSwift consta de cuatro tipos que son:

PublishSubject

PublishSubject no almacenará ninguna emisión anterior. Esto significa que los suscriptores solo reciben nuevas emisiones. Siempre comenzará como vacío.

Después de la suscripción, el suscriptor recibirá valores de PublishSubject hasta que se elimine la suscripción.

PublishSubject

BehaviorSubject

BehaviorSubject recordará el último elemento emitido. Este artículo se emite a los nuevos suscriptores. Tendrá un valor inicial que se emitirá a los suscriptores cuando no exista ningún elemento anterior.

BehaviorSubject

BehaviorRelay

Envuelve un BehaviorSubject, conserva su valor actual como estado y reproduce solo el último / valor inicial para los nuevos suscriptores.

En esencia, BehaviorRelay es un contenedor alrededor de BehaviorSubject que permite un manejo más simple.

En lugar del envío habitual de los eventos next, BehaviorRelay proporciona la sintaxis de puntos para obtener y establecer un valor único que se emite como un evento next y se almacena para su reproducción.

BehaviorRelay

ReplaySubject

ReplaySubject es similar a BehaviorSubject pero te permite especificar la cantidad de emisiones anteriores para recordar. Estos se emiten a los nuevos suscriptores. ReplaySubject siempre comenzará como vacío.

ReplaySubject

Conclusión

Cómo has visto, los componentes de códigos de operadores en RxSwift, te facilitan el trabajo de programación, por lo que podrás ahorrar tiempo cada vez que desees filtrar, transformar o combinar elementos emitidos por observables.

Por otra parte, el uso de los observables Subjects te permite agregar elementos de tal manera de establecer secuencias observables, en donde los suscriptores además de aceptar las suscripciones pueden emitir un evento.

Ahora ya tienes una idea de como usar los Operadores y Subjects con RxSwift


¿Qué te pareció el artículo? ¿Te gustaría dejarme comentario? Ah, y si te ha gustado no te olvides de compartirlo 😄