Я работаю над проектом 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]>
Я добавил страницу: Int
до State
struct, но не знаю, как реализовать page
(увеличить страницу и вызвать API, когда пользователь прокручивает внизу)