Я пытаюсь классифицировать элементы в разделах в табличном представлении на основе дат в качестве заголовков разделов. Я создал два массива, чтобы потом их можно было объединить для таких разделов и строк, как:
var tableViewModel = [TableViewModel]()
var items = [TableViewModel]()
var sectionTableViewModel = [Timestamp]()
var sectionItems = [Timestamp]()
Вот как я могу загрузить данные из Firestore:
ref.addSnapshotListener { documentSnapshot, error in
guard let data = documentSnapshot else {
print("Error fetching document: \(error!)")
return
}
let documents = data.documents
for document in documents {
let item = TableViewModel(json: document.data())
let sectionItem: Timestamp = document.data()["date"] as! Timestamp
self.items.append(item)
if (!self.sectionItems.contains(sectionItem)) {
self.sectionItems.append(sectionItem)
}
}
// Display as descending order.
self.tableViewModel = self.items as [TableViewModel]
self.sectionTableViewModel = self.sectionItems as [Timestamp]
self.collectionView.reloadData()
}
Теперь я не могу понять, как разделить мои элементы по разделам для tableView. То, что я сделал до сих пор, это заполнение раздела и строк, таких как:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.tableViewModel.count
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return self.sectionTableViewModel.count
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "sectionHeader", for: indexPath) as! SectionHeaderCollectionReusableView
header.headerLabel.text = sectionTableViewModel[indexPath.section]
return header
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! UpdatesCollectionViewCell
cell.titleLabel.text = self.tableViewModel[indexPath.row].title
}
Что он делает, так это то, что он правильно отображает заголовки разделов, но каждый раздел отображает все данные снова и снова, и я не могу понять, как фильтровать данные по дате. Создать другой массив и объединить вместе tableViewModel
и sectionTableViewModel
? Или мне отфильтровать элементы в cellForItemAt
? Или изменить структуру данных Firestore?