Advertisement
Guest User

Untitled

a guest
Jan 15th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.80 KB | None | 0 0
  1. public func get() -> Response<[Order],String> {
  2.             return get(page: 1).flatMap { result in
  3.                 guard let page = result.value else { return .just(.init(error: result.error!)) }
  4.                 if page.totalPages == 1 {
  5.                     return .just(.init(value: page.content))
  6.                 } else {
  7.                     let iterator = (2...page.totalPages)
  8.                     let sequences = iterator.map{ self.get(page: $0).asObservable() }
  9.                     let concatenation = Observable.concat(sequences)
  10.                     let scaning: Observable<Result<Page<Order>, DictionaryError<String>>> = concatenation.scan(result, accumulator: { (totalResult, result) in
  11.                         guard let newPart = result.value else { throw result.error! }
  12.                         guard let totalPart = totalResult.value else { throw totalResult.error! }
  13.                         return .init(value: Page.new(content: totalPart.content + newPart.content, index: totalPart.index, totalPages: totalPart.totalPages))
  14.                     })
  15.                     let driver = scaning.asDriver(onErrorRecover: { (error) -> Response<Page<Order>,String> in
  16.                         return .just(.init(error: error as! DictionaryError<String>))
  17.                     })
  18.                     let resultingDriver: Response<[Order],String> = driver.map{
  19.                         switch $0 {
  20.                         case .success(let sumPage): return .init(value: sumPage.content)
  21.                         case .failure(let error): return .init(error: error)
  22.                         }
  23.                     }
  24.                     return resultingDriver
  25.                 }
  26.             }
  27.         }
  28.        
  29.         private func get(page: Int) -> Response<Page<Order>,String> {
  30.             return .empty()
  31.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement