2017-12-12 16 views
0

1 초마다 문자열을 방출하는 관측 가능함을 감안할 때 이러한 요소를 수집하고 매초마다 전체 목록.각 초를 방출하는 관측 가능 (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: +) 

어디 + 배열의 요소를 삽입하는 기능입니다.

문제가 완료된 후에 만 ​​요소의 전체 목록을보고 있습니다. 매 초마다 새로운 목록을받지는 않습니다.

의견이 있으십니까?

답변

1

실제로, .reduce()은 완료시에만 실행됩니다. 단순히 .scan()으로 바꾸면 모든 업스트림 이벤트가 시작됩니다.

그런데 왜 사용자 정의 관찰 가능 대신에 Observable.timer()을 사용하지 않으시겠습니까?

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

상기 방법은 잦은 배출에 사용할 수 있습니다.