Вам нужно что-то вроде этого: https://gist.github.com/danielt1263/ec1032375498eb95aa260239b289d263
/**
Calls `producer` with `seed` then emits result and also passes it to `pred`. Will continue to call `producer` with new values as long as `pred` returns values.
- parameter seed: The starting value needed for the first producer call.
- parameter pred: This closure determines what the next value pass into producer should be or returns nil if no more calls are necessary.
- parameter producer: The function that produces the Single result.
- returns: An observable that emits each producer's value.
*/
func emitWhile<T, U>(seed: U, pred: @escaping (T) -> U?, producer: @escaping (U) -> Single<T>) -> Observable<T>
seed
- это га sh для первой страницы. pred
берет результат сетевого запроса, извлекает ha sh для следующей страницы и возвращает его (или возвращает ноль, если следующей страницы нет.) producer
берет ha sh и возвращает Наблюдаемый, который сделает запрос на страницу, когда она подписана.
Вы, вероятно, захотите собрать все элементы, используя либо сканирование, либо уменьшение, чтобы испустить все страницы как один массив.