作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理一个需要分页的 iOS 项目(API 调用将有一个 page
参数来提取结果)。理想情况是,当用户滚动到 collectionView
底部附近时,将调用 API 以获取更多结果(增加 page
编号),然后将新结果添加到现有模型数组中.
这是我在用户搜索时起作用的实现:
这是 PhotoListViewReactor
import RxSwift
import RxCocoa
import ReactorKit
class PhotoListViewReactor : Reactor {
enum Action {
case searchFlickr(_ keyword: String, _ page: Int)
}
enum Mutation {
case flickrList([Photos])
}
struct State{
var keyword : String?
var photos : [Photos] = []
var page: Int = 1
}
var initialState: State = State()
init() { }
func mutate(action: Action) -> Observable<Mutation> {
switch action {
case let .searchFlickr(keyword,page):
return AppService.request(keyword: keyword,page: page)
.catchErrorJustReturn([])
.map{[Photos(photos: $0)]}
.map {Mutation.flickrList($0)}
}
}
func reduce(state: State, mutation: Mutation) -> State {
var newState = state
switch mutation {
case let .flickrList(photos):
newState.photos += photos
newState.page += 1
}
return newState
}
}
从API获取数据的函数是
static func request(keyword: String, page: Int) -> Observable<[Photo]>
我添加了一个 page: Int
到 State
结构,但不知道如何实现 page
(增加页面并调用 API 时用户滚动到底部)
最佳答案
这是我用 RxSwift 编写的解决方案。要点附带代码和单元测试。 https://gist.github.com/danielt1263/10bc5eb821c752ad45f281c6f4e3034b
它处理以下内容:
protocol PaginationUISource {
var reloadLastPage: Observable<Void> { get } /// reload most recently loaded page
var loadNextPage: Observable<Void> { get } /// load next page
var bag: DisposeBag { get }
}
protocol PaginationNetworkSource {
associatedtype Item
func loadData(page: Int) -> Observable<[Item]>
}
struct PaginationSink<T> {
let isLoading: Observable<Bool> /// true if network loading is in progress.
let elements: Observable<[T]> /// elements from all loaded pages
let error: Observable<Error> /// fires once for each error
}
这是我不久前写的,我想我现在可以做得更好,但它应该可以帮助您入门。
关于iOS 使用 ReactorKit 和 RxSwift 实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52510219/
我正在处理一个需要分页的 iOS 项目(API 调用将有一个 page 参数来提取结果)。理想情况是,当用户滚动到 collectionView 底部附近时,将调用 API 以获取更多结果(增加 pa
我是一名优秀的程序员,十分优秀!