使用RxSwift在x秒后显示活动指示器

时间:2016-10-13 00:28:36

标签: ios swift reactive-programming rx-swift

我目前正在使用RxSwift和ActivityIndicator扩展名(https://github.com/ReactiveX/RxSwift/blob/master/RxExample/RxExample/Services/ActivityIndicator.swift)。

我正在尝试在API请求超过2秒时显示活动指示符(微调器)图像。 RxSwift ActivityIndicator基本上是(所谓的热门)Observable<Bool>,在进行API调用时会发出true,而在整个事情发生时会发出false

为了获得理想的行为,我使用了throttledebounce等许多组合以及windowpausable之类的运算符,但是我永远无法做到这一点。

思想?

1 个答案:

答案 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秒标记之前的最后一个元素。