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