обработка первой и последней страницы разбивки на страницы представления коллекции?

Скажем , если мои данные получены с сервера / 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.

Другие вопросы по тегам