【发布时间】:2018-05-17 10:55:16
【问题描述】:
我有一个带有一些公共可用功能的单例类(实际上它会进行网络抓取,但在这里进行了简化)。这些函数都返回一个Single<T>,但类型不同。
它可能看起来像这样:
class Singleton {
static let shared = Singleton()
private init() { }
func doSomethingInt() -> Single<Int> {
return Single.just(1)
.delay(3, scheduler: MainScheduler.instance)
}
func doSomethingString() -> Single<String> {
return Single.just("Wow")
.delay(3, scheduler: MainScheduler.instance)
}
}
当有人调用Singleton.shared.doSomthingInt() 时,该函数应该放在一个队列中,直到它通过队列才执行。队列中的下一个 observable 不应该在它完成之前开始执行。理想情况下,Singleton 会有一个函数,它会延迟传递给它的每个函数的执行。像这样的:
private func placeInQueue<T: Any>(operation: Single<T>) -> Single<T> {
// place in some magic shared queue
return operation
}
然后我可以将这个函数链接到应该放在队列中的函数的开头,如下所示:
func doSomethingString() -> Single<String> {
let operation = Single.just("Wow")
.delay(3, scheduler: MainScheduler.instance)
return placeInQueue(operation)
}
我觉得这应该可以通过concat 操作以某种方式实现,但我还没有能够解决它。
有什么线索吗?
【问题讨论】: