0

我想编写一个函数,以一种我可以终止它的方式包装一个 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实例变量的情况下做到这一点吗?(即更实用..)

4

0 回答 0