2017-12-12 3 views
0

1秒ごとに文字列を放出する観測可能性を与えられれば、これらの要素を収集し、毎秒フルリスト。各秒を放出する観測可能な(A)を、1秒ごとに要素のリストを放出する観測値に変換する方法

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: +) 

問題は、完成した後にのみ、要素の完全なリストが表示されていることです。私は毎秒新しいリストを受け取っていません。

答えて

1

実際には.reduce()は完了時にのみ発生します。単に.scan()に置き換えれば、すべてのアップストリームイベントで起動します。

そして、どうしてもカスタムオブザーバブルの代わりにObservable.timer()を使用しないでください。

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

上記の方法を頻繁に使用することができます。

関連する問題