给定一个可观察到每一秒发出字符串的可观察到的,我需要另一个可观察到的元素并每秒发出完整列表。
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.
上面的方法可用于频繁发射。