У меня есть класс Singleton (на самом деле он собирает очистку веб-страниц, но упрощенно здесь) с некоторыми общедоступными функциями. Все функции возвращают 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()
, функция должна быть помещена в очередь, а не выполняться до тех пор, пока она не пройдет через очередь. Следующее наблюдаемое в очереди не должно начинаться до того, как все завершится. В идеале 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
, но я пока не смог ее решить.
Есть какие-нибудь подсказки?