Есть ли способ загрузить только несколько элементов из большого списка объектов и заполнить их в UICollectionView

У меня есть список, содержащий 100 объектов, но я хочу загрузить только первые 10 и заполнить его в моем UICollectionView, и когда я прокручиваю вниз, я могу затем заполнить оставшиеся объекты в списке.

Это должно быть выполнено в UICollectioView и Swift 4 и выше.


person BigFire    schedule 16.05.2019    source источник
comment
Возможный дубликат Загрузить дополнительные данные по требованию прокрутки в CollectionView   -  person dahiya_boy    schedule 16.05.2019
comment
Есть ли конкретная причина, по которой вам нужно это сделать? UICollectionView будет (вкратце) загружать только видимые ячейки.   -  person Maximilian    schedule 16.05.2019
comment
большой список объектов извлекается из API?   -  person Alastar    schedule 16.05.2019
comment
@Alastar Нет, большой список данных уже получен из API.   -  person BigFire    schedule 16.05.2019
comment
разве вы не можете использовать разбиение на страницы в качестве параметра в этом API?   -  person Alastar    schedule 16.05.2019
comment
@Аластар. у меня нет никакого контроллера над API   -  person BigFire    schedule 16.05.2019


Ответы (1)


Если у вас уже есть массив, вы можете разбить его на страницы, а затем отобразить нужные вам страницы:

let entries = Array(1...100).split(into: 10)

...используя это расширение:

extension Array {
    func split(into size: Int) -> [[Element]] {
        return stride(from: 0, to: count, by: size).map {
            Array(self[$0..<Swift.min($0 + size, count)])
        }
    }
}

Затем вы можете отобразить первый массив как первую страницу, второй как вторую и так далее.


взято из здесь

person LinusGeffarth    schedule 16.05.2019
comment
после разделения массива на 10, как мне заполнить данные в UICollectionView и предотвратить загрузку только 10 элементов, когда пользователь прокручивает вверх или вниз - person BigFire; 16.05.2019
comment
Здесь у вас есть два варианта: использовать методы prefetchItems или willDisplay. В последнем случае ознакомьтесь с этим сообщением. - person LinusGeffarth; 16.05.2019