如何将每秒发出的可观察(a)转换为可观察到的可观察到的元素列表



给定一个可观察到每一秒发出字符串的可观察到的,我需要另一个可观察到的元素并每秒发出完整列表。

func oneAtATime() -> Observable<String> {
    return Observable.create{ observable in
        DispatchQueue.global().async {
            let main = DispatchQueue.main
            for i in 0..<10 {
                sleep(1)
                main.async{
                    observable.onNext("Element(i)")
                }
            }
            main.async{
                observable.onCompleted()
            }
        }
        return Disposables.create()
    }
}

这是我目前拥有的:

let oneEverySecond = oneAtATime()
var accEverySecond : Observable<[String]> = oneEverySecond.reduce([],accumulator: +)

其中 是将元素插入数组中的函数。

问题在于,我只有在完成后才能看到元素的完整列表。我不会每秒收到新列表。

有什么想法?

的确, .duce()仅在完成时发射。只需将其替换为 .scan(),它将在每个上游事件中发射。

,顺便说一句,为什么不使用 observable.timer()而不是自定义观察?

Observable.timer(1, TimeUnit.SECONDS);  // Replace 1 second with your time if want to emit on other interval.

上面的方法可用于频繁发射。

最新更新