2016-10-13 17 views
1

現在RxSwiftとActivityIndicatorの内線番号(https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Services/ActivityIndicator.swift)を使用しています。RxSwiftを使用してx秒後に動作インジケータを表示

APIリクエストに2秒以上かかると、アクティビティインジケータ(スピンナ)イメージを表示しようとしています。 RxSwift ActivityIndicatorは、基本的にAPI呼び出しが行われたときtrueを発する(ホットと呼ばれる)Observable<Bool>であり、全部が完了したときfalseである。

希望の動作を得るために、私は一緒にwindowpausableなどの事業者と、throttle ING、debounce INGなどの多くの組み合わせでいじってきたが、私はそれが非常に権利を取得することができません。

思考? activityUntil = 1

+0

私はReactiveCocoaを使用していますが、 'delay(second)'という名前の関数があります。この関数は指定された秒後に値を出力しますが、RxSwiftのReadmeドキュメントを見てきました。 /reactivex.io/documentation/operators/delay.html – Enix

+0

'delaySubscription'という名前の関数があります。それはあなたが望むものですか? – Enix

+0

私は '遅延 'を知っていますが、これではこの問題は解決しません。問題は、 'true'要素を遅らせたいだけでなく、' false'要素がスピナーが現れるx秒の前に来た場合には完全に無視することです。 – RamwiseMatt

答えて

0
let disposeBag = DisposeBag() 

let activityUntil = 1 
// `true` at 0 seconds, `false` at `activityUntil` seconds 
let trueUntil = Observable<Int>.timer(0, 
             period: 1, 
             scheduler: MainScheduler.instance) 
    .map { $0 < activityUntil } 
    .distinctUntilChanged() 
    .shareReplayLatestWhileConnected() 

// this is to show you the actual values coming through 
_ = trueUntil 
    .subscribe { print("raw: \($0)") } 

let yourDesiredObservable = trueUntil 
    .delaySubscription(2, scheduler: MainScheduler.instance) 

yourDesiredObservable 
    .subscribe { print("still activity?: \($0)") } 

生:次の(真の)
生:次の(偽)
まだ活動?:次の(偽)activityUntil = 3

生:次の(真の)
まだ活動?:次の(真の)
生:次の(偽)
まだ活動?:次の(偽)

あなたが見ることができるように、yourDesiredObservableは要素のみを発します2秒後、最後の要素を2秒前のマークから再生します。

関連する問題