Introducción a RxSwift (Conceptos básicos)

La programación reactiva es un paradigma de programación asincrónica que se ocupa de los flujos de datos y la propagación del cambio.

RxSwift es una biblioteca para trabajar con código asíncrono que presenta eventos como flujos de eventos con la capacidad de suscribirse a ellos y le permite aplicarles enfoques de programación funcional, lo que simplifica enormemente el trabajo con secuencias complejas de eventos asíncronos.

¿Por qué debería usar RxSwift?

logotipo de rxswift

RxSwift organiza el trabajo con flujos de eventos y conexiones entre objetos.

El ejemplo más simple y obvio son los enlaces: puede actualizar la interfaz simplemente configurando un nuevo valor para una variable en el ViewModel. Por lo tanto, la interfaz se vuelve impulsada por datos.

Además, RxSwift le permite describir el sistema en un estilo declarativo, lo que simplifica el código y mejora su legibilidad. RxSwift también recibe constantemente nuevas actualizaciones, corrige errores menores, agrega funciones de nuevas versiones de Swift y nuevos enlaces.

Y RxSwift es de código abierto, puede realizar un seguimiento de todos los cambios.

Conceptos básicos de RxSwift

Hay tres tipos principales de componentes de código Rx:

  • observables,
  • Operadores, y
  • programadores.
observables

Un Observable es una secuencia con algunas características especiales. Una de estas características, y quizás la más esencial, es asincrónica.

Los observables generan eventos a lo largo del tiempo, lo que se conoce como emisión. Los eventos pueden incluir valores como números o instancias de un tipo personalizado, o pueden ser gestos reconocidos como toques.

Operadores

La clase Observable contiene varios métodos auxiliares que pueden realizar varias operaciones en los elementos de la secuencia.

Dado que no tienen efectos secundarios, se pueden combinar, lo que le permite construir una lógica bastante compleja en un estilo declarativo.

programador

El planificador nos permite ejecutar nuestros observables en subprocesos específicos. Hay dos formas de configurar el programador observable: observeOn() y subscribeOn().

SubscribeOn() es responsable de en qué subproceso se ejecutará todo el proceso observable hasta que sus eventos lleguen al suscriptor. Como puedes suponer, ObserveOn() se ocupa de un hilo que procesa los eventos recibidos de subscriberOn().

Con el programador, puede descargar fácilmente cualquier cosa de la web en un subproceso en segundo plano y, una vez que obtiene el resultado, puede ir al subproceso principal y afectar la interfaz de usuario.

Un ejemplo de RxSwift:

Ahora que hemos descubierto los conceptos básicos de la biblioteca y entendido por qué debemos usarla, veamos un ejemplo práctico.


import RxCocoa 
import UIKit
import RxSwift
class ViewController: UIViewController {
  @IBOutlet weak var countLabel: UILabel;
  @IBOutlet weak var tapButton: UIButton;
  var count = 0
  var disposeBag = DisposeBag()
  override func viewDidLoad() {
    super.viewDidLoad()
    countLabel.text = "(count)"
  tapButton.rx
    .tap
    .throttle(5.0, scheduler: MainScheduler.instance)
    .subscribe(onNext: { [weak self] in
    self?.count += 1
    self?.countLabel.text = "(self?.count ?? 0)"
    })
    .disposed(by: disposeBag)
  }
}

Para simplificar este ejemplo, hagamos que el número en el contador aumente cuando se presiona el botón.

Para esto, primero, necesitas importar las dependencias:


import RxCocoa
import RxSwift

Ahora echemos un vistazo a la pieza de código en tapButton.rxcentrándose en cada línea.


tapButton.rx
    .tap
    .throttle(5.0, scheduler: MainScheduler.instance)
    .subscribe(onNext: { [weak self] in
    self?.count += 1
    self?.countLabel.text = "(self?.count ?? 0)"
    })
    .disposed(by: disposeBag)
  }
}

Como mencioné anteriormente, RxCocoa nos brinda la familia de métodos Rx que contienen métodos listos para usar que devuelven un ControlEvent para nosotros.

En este caso, estamos interesados ​​en el método tap. Nos suscribimos para recibir eventos, donde pasamos un cierre a la onNext parámetro, que se ejecutará cuando ocurra cada evento.

También estamos incrementando el contador y actualizando la etiqueta. Desde ControlEvent es esencialmente una secuencia infinita, no tendrá onError y onComplete parámetros

También debemos mencionar DisposeBag por separado. Cuando termina de trabajar con una secuencia, necesita liberar memoria. Cuando miramos la fuente de ObservableTypedeberíamos ver que el método subscribe devuelve un objeto de tipo Disposable.

Y si observa su protocolo, resulta que requiere un único método de eliminación que, como puede adivinar por su nombre, cumple este propósito. Pero la eliminación manual de objetos puede resultar tediosa, por lo que debe utilizar el DisposeBag clase y por qué?

Si está utilizando una suscripción y no la agrega a la bolsa, la elimina explícitamente o completa el observable de alguna otra manera, es probable que tenga una pérdida de memoria.

Por lo tanto, para evitar esto, DisposeBag debería ser usado.

Conclusión

RxSwift es una biblioteca relativamente grande. Si desea familiarizarse con todas las API, debe leer la documentación, codificar con frecuencia y leer el código fuente.

Un estudio detallado de la documentación de RxSwift no solo aumentará su eficiencia de desarrollo, sino que también profundizará su comprensión del lenguaje Swift. Por lo tanto, puedo desearle todo lo mejor en su exploración de RxSwift.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio