在涵盖你的纪念nts上接受的答案......即:
用户想要订购一辆车。他可以手动设置一个取货地点(可观察的a),否则我们提供gps位置(可观察的b)作为取货地点。现在,如果用户点击地图上的“我的位置”按钮,则我们希望返回到gps位置作为提供商。
您有三个源流:
- 一个:当前GPS位置(纬度/经度对流。)
- B:手动选择纬度/经度(纬度/经度对流。 )
- C:A键龙头(空隙流)
我RxSwift而非RxJava写到这,但希望你能翻译:
extension Observable {
static func switchBetween(_ a: Observable<Element>, _ b: Observable<Element>, using trigger: Observable<Void>) -> Observable<Element> {
return Observable.create { observer in
let lock = NSRecursiveLock()
var withB = false
let disposeA = a.subscribe({ event in
if withB == false {
observer.on(event)
}
})
let disposeB = b.subscribe({ event in
lock.lock(); defer { lock.unlock() }
withB = true
observer.on(event)
})
let disposeTrigger = trigger.subscribe({ event in
if case .next = event {
lock.lock(); defer { lock.unlock() }
withB = false
}
})
return Disposables.create(disposeA, disposeB, disposeTrigger)
}
}
}
可以这样调用:
Observable.switchBetween(a, b, using: c)
谢谢你,有没有办法恢复到可观察到的B' (即重置可观察的a,好像它没有发射任何物品一样)? – Nima
我真的不明白你的意思。你不重置observables。他们发射,然后他们完成或错误,然后他们完成。 –
所以这里有一个具体的例子:用户想要订购一辆车。他可以手动设置一个取货地点(可观察的a),否则我们提供gps位置(可观察的b)作为取货地点。现在,如果用户点击地图上的“我的位置”按钮,则我们希望返回到gps位置作为提供商。我试图用多个地方观察到的单个观察值来解决这个问题,所以我不能真正重新创建它。 – Nima