обработка первой и последней страницы разбивки на страницы представления коллекции?
Скажем , если мои данные получены с сервера / api с вызовом api, как можно определить первую и последнюю страницу данных представления коллекции, то есть, если page == firstPage && is dataToFetch.isAvailable == true isdataFetching = true fetchData //(допустим, 20 ячеек collectionView на выборку)
и если page == lastPage && dataToFetch.isUnavailable == true имеет значение fetchingData = false
как быстро выполнить вышеуказанную логику при извлечении данных из вызова API?
Пока я реализовал willDisplay cell
но застрял здесь:
func collectionView(_ collectionView: UICollectionView, willDisplay cell:
UICollectionViewCell, forItemAt indexPath: IndexPath) {
if let response = response, let data = response.data, let content = data.content {
if indexPath.row == content.count - 1 {
call(page: data.number + 1)
}
}
}
мой метод вызова api выглядит примерно так:
func APIcall(page: Int = 0) {
NSLog("Call api")
Server.getDatat(page: page).done { (data) -> Void in
// handling first page and last page ..?
self.response = data
NSLog("Called api")
self.collectionView.reloadData()
}.catch { (err) in
NSLog("\(err)")
}
}
1 ответ
Что вы можете сделать, так это проверять при каждой выборке, есть ли у вас 20 элементов (или сумма, которую вы хотите получить за вызов). Если у вас меньше 20 элементов, это означает, что вам нечего получить, поэтому у вас может бытьvar haveElementsLeft: bool
который в этом случае вы бы установили в false. А затем перед вызовом сети проверьте, верна ли эта переменная. Если это false, запрос следует игнорировать.
Если у вас есть 20, это означает 2 вещи: либо у вас все еще есть элементы, которые нужно получить с сервера, либо ваш последний вызов на сервер дал вам последние 20. В любом случае вам придется сделать еще один вызов api, чтобы проверить, есть ли он был фактически последними 20 или у вас еще остались элементы.
Редактировать:
func getData(page: Int) {
guard haveElementsLeft else { return }
getElements(stuff: stuff, page: page)
}
Это только выполнит getElements()
если haveElementsLeft == true
.
Также вам нужно будет подсчитать элементы, которые вы получаете в своем вызове api после того, как вы правильно их проанализировали, чтобы вы могли установить haveElementsLeft
var в true
или false
.