终止所有可观察对象并等待它们完成

时间:2016-02-07 13:08:34

标签: system.reactive rx-swift

我想编写一个以可以终止它的方式包装observable的函数,并在完成后执行一些代码。我想到了:

class ObsrevableWrapper {

  var terminating: Bool = false
  var terminatingObservable: Observable<Int>?
  func wrapObservable(o: Observable<Int>) -> Observable<Int> {
    terminatingObservable = Observable
      .deferred { () -> Observable<Int> in
        if self.terminating {
          return Observable.empty()
        } else {
          return o
        }
      }
      .takeWhile {_ in
        return !self.terminating
      }
      .publish().refCount()

    return terminatingObservable!
  }

  func terminateObservable() {
    terminating = true
    terminatingObservable!
      .map { _ -> Void in
        return ()
      }
      .ignoreElements()
      .concat(Observable.just(()))
      .subscribeNext {
        self.output("Performing completion code")
    }
  }

}

我可以在没有var terminating: Bool实例变量的情况下执行此操作吗? (即功能更强..)

0 个答案:

没有答案