Necesito implementar algo como "ese valor en particular fue emitido por el editor al menos una vez en el pasado". Así que básicamente verdadero/falso. Como ejemplo para responder si alguna vez se envió cero aquí:
let publisher = PassthroughSubject<Int, Never>() ... for _ in 1...3 { publisher.send(Int.random(in: 0...2)) }Solo se me ocurrieron las siguientes opciones y ambas se sienten antinaturales de alguna manera:
//Option #1 Using scan let hadZero = publisher .scan(false) { $0 || $1 == 0 } //Option #2 Merging with CurrentValueSubject let hadZero = Publishers.Merge( CurrentValueSubject<Bool, Never>(false), publisher.contains { $0 == 0 } )¿Hay alguna manera mejor de hacerlo?
Puede utilizar el operador contains , que emite true inmediatamente cuando el valor buscado es emitido por su upstream o emite false cuando upstream se completa sin haber emitido el valor buscado.
let hadZero = publisher.contains(0)