Я думаю, вы можете выбрать другой способ создания своих разделов. Вот быстрый пример для вас. В этом случае я создаю тестовую структуру Document, структуру Section и SectionManager, которые могут помочь вам вернуть раздел для заполнения tableView.
Структура документа Это будет в значительной степени объект Document, который у вас уже есть.
struct Document {
let date : String
let foo : String
init(date: String!, foo: String!) {
self.date = date
self.foo = foo
}
}
Затем вы можете создать Структуру раздела :
struct Section {
var title: String
var items : [Document]
init(title: String, documents : [Document]) {
self.title = title
items = documents
}
}
Тогда ваш sectionManager :
class SectionsManager {
// Singleton
static let shared = SectionsManager()
private init() {}
func getSectionsFromDictionary(dictionary: [String: [Document]]) -> [Section] {
var sectionsArray = [Section]()
for (title, objects) in dictionary.sorted(by: {$0.0 > $1.0}) {
let section = Section(title: title, documents: objects)
sectionsArray.append(section)
}
return sectionsArray
}
}
Заметьте, я использую там синглтон.
Наконец, вы можете просто использовать этот код для создания своих разделов в viewController. Здесь я использую collectionView, потому что они мне нравятся больше, но вместо этого вы можете использовать tableView.
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
lazy var collectionView : UICollectionView = {
let layout = UICollectionViewLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.dataSource = self
collectionView.delegate = self
return collectionView
}()
let documents : [Document] = [Document(date: "2005", foo: "bar"), Document(date: "2005", foo: "bar"), Document(date: "2004", foo: "bar")]
var documentsBySection : [String : [Document]] = ["2005": [], "2004" : []]
var sections: [Section] = []
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(collectionView)
for document in self.documents {
let date = document.date
self.documentsBySection[date]?.append(document)
}
sections = SectionsManager.shared.getSectionsFromDictionary(dictionary: documentsBySection)
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return sections.count
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print(sections[section].items.count)
return sections[section].items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
return UICollectionViewCell()
}
}
Затем вы можете повторно использовать менеджер в своем приложении для заполнения любой другой коллекции. Если вы скопируете и вставите весь код, вы можете проверить, как он работает.