【发布时间】:2020-01-10 16:34:07
【问题描述】:
我有一个热门的 observable C 我想听它直到另一个 observable B 触发(即生成 onNext 事件)。 B 是一个冷的可观察对象,我不想在另一个可观察对象 A 触发之前“唤醒”它。
换句话说:
- 我在听
C。 - 我正在听
A,一旦它启动,我就开始听(因此醒来)B - 一旦
B触发,我就会停止收听C
这是我的代码:
let b = Observable<Int>.create { s in
print("b got awoken") // I want to see this line only after A fires
s.onNext(666)
s.onCompleted()
return Disposables.create()
}
let c = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
c
.takeUntil(b) // I do not want to listen to C after B has fired
.subscribe(onNext: { print("C: \($0)") })
.disposed(by: _bag)
let a = PublishSubject<Int>()
a
.do(onNext:{ print("A: \($0)") })
.flatMap {_ in return b } // After A fires, I "wake up" (or subsribe to) B
.subscribe(onNext:{ print("B: \($0)") })
.disposed(by: _bag)
// Some delay to let C generate some events and listen to them
DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
print("anext 1")
a.onNext(1)
}
这是输出:
b got awoken
anext 1
A: 1
b got awoken
B: 666
这是所需的输出:
C: 0
C: 1
C: 2
C: 3
anext 1
A: 1
b got awoken
B: 666
我应该如何管理这三个 observable 以实现所需的行为?
【问题讨论】:
-
你能贴一张你想要的大理石图吗?我不太了解它。
标签: observable rx-swift