es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

RxSwift – bloquear/detener/ignorar evento si se cumple la condición.

Después de filtrar una lista Observable, podría tener una lista vacía. Sólo estoy interesado en eventos que contengan una lista poblada. ¿Existe alguna forma de detener la propagación de eventos vacíos a onNext?


let source: BehaviorRelay<[Int]> = .init(value: []) source .map { nums -> [Int] in return nums.filter { $0 < 10 } } /// ¿Qué se puede hacer aquí para detener/bloquear/ignorar una lista vacía? .subscribe(onNext: { nums in print("OKPDX \(nums)") }) source.accept([1, 9, 13]) // imprime "[1, 9]" (todo bien) source.accept([20, 22, 101]) // imprime "[]" (no es deseable, preferiría no saber)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puede utilizar el operador filter para ignorar listas vacías y sólo permitir que las listas no vacías se propaguen a onNext. Aquí hay un fragmento de código actualizado con el operador de filtro añadido:

    let source: BehaviorRelay<[Int]> = .init(value: [])
    
    source
        .map { nums -> [Int] in
            return nums.filter { $0 < 10 }
        }
        .filter { !$0.isEmpty } // ignora las listas vacías
        .subscribe(onNext: { nums in
            print("OKPDX \(nums)")
        })
    
    source.accept([1, 9, 13]) // imprime "[1, 9]" (todo bien)
    source.accept([20, 22, 101]) // no imprime nada (lista vacía ignorada)
    

    La línea filter { !$0.isEmpty } sólo permitirá que las listas no vacías se propaguen a onNext. Cualquier lista vacía será ignorada y no activará onNext.

Comments are closed.