// MARK: Example 1
typealias Page = [Int]
typealias Callback = () -> Void
// take previous Page, and create next one
let nextPage = { (previousPage: Page?) -> Observable<Page> in
let last = previousPage?.last ?? 0
return Observable.just([last + 1, last + 2, last + 3])
}
// return true if there are more pages to be emitted
let hasNext = { (page: Page) -> Bool in
guard let last = page.last else { return true }
return last < 10 // arbitrary condition for the demo
}
// create the pager
let trigger = PublishSubject<Void>()
let page$ = Observable.page(nextPage, while: hasNext, when: trigger)
let next = trigger.onNext
page$.subscribe(onNext: { print($0) })
// print [1, 2 ,3]
next() // print [4, 5, 6]
next() // print [7, 8, 9]
next() // print [10, 11, 12]
// MARK: Example 2 (page from array)
Observable
.page(Array(1...10), by: 3, when: trigger)
.subscribe(onNext: { print($0) })
// print [1, 2 ,3]
next() // print [4, 5, 6]
next() // print [4, 5, 6]
next() // print [10]
查看更多示例,请参阅示例
要运行示例项目或运行游乐场,请先从仓库克隆代码,然后从Example目录中运行 pod install
RxPager 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "RxPager"
这个 Pod 是受 @mttkay 的作品的启发,并使用在这里讨论的想法重构https://github.com/RxSwiftCommunity/RxSwiftExt/issues/30
RxPager 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。