我目前正在使用RxSwift和ActivityIndicator
扩展名(https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Services/ActivityIndicator.swift)。
我正在尝试在API请求超过2秒时显示活动指示符(微调器)图像。 RxSwift ActivityIndicator
基本上是(所谓的热门)Observable<Bool>
,在进行API调用时会发出true
,而在整个事情发生时会发出false
。
为了获得理想的行为,我使用了throttle
,debounce
等许多组合以及window
和pausable
之类的运算符,但是我永远无法做到这一点。
思想?
答案 0 :(得分: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 = 1
:
raw:next(true)
raw:next(false)
仍然活动?:下一个(假)
使用activityUntil = 3
:
raw:next(true)
仍然活动?:下一个(真实)
raw:next(false)
仍然活动?:下一个(假)
如您所见,yourDesiredObservable
仅在2秒后发出元素,重播2秒标记之前的最后一个元素。