У меня есть CollectionView
, в котором отображаются элементы, упорядоченные по местоположению, и я пытаюсь разбить их на определенную сумму (например, 20 элементов).
Я использую Geofire
, чтобы упорядочить их по местоположению, но проблема в том, что он не поддерживает запросы, ограниченные количеством результатов, поэтому я не могу получить целую страницу без доступа ко всем идентификаторам.
Мне пришла в голову идея попасть на первую страницу. все ключи элементов в заданном местоположении, упорядоченные по местоположению:
locationQuery?.observe(.keyEntered, with: { (key, location) in
print("KEY: ", key, " and location: ", location.coordinate)
itemKeys.append(key)
})
locationQuery?.observeReady {
print("All item keys loaded. There are: ", itemKeys.count, " items in radius")
locationQuery?.removeAllObservers()
completion(itemKeys) //itemKeys.count would be the number of cells in the collectionView
}
Затем сохраните их, и на каждой странице будет получено и запрошено следующее (pageAmount) itemKeys с использованием Firebase rererence.child(itemKeyInArray)
.
Мое основное беспокойство по этому поводу заключается в том, что, если у меня очень большой набор элементов в базе данных, насколько эффективно он будет выполнять итерацию (и сортировку) по всем ключам.
Другой подход начинался с небольшого наборарадиус, и увеличивая его на каждой странице до предела, и, несмотря на то, что он кажется более эффективным, мне все равно нужно общее количество элементов в радиусе (чтобы рассчитать количество ячеек, яn * CollectionView
)
Каков был бы правильный подход для разбивки результатов по локациям?