Хорошо, у меня есть предварительная рабочая версия представления коллекции с доступным источником данных. Все работает, и я только что добавил добавление и изменение элементов, а удаление элементов еще предстоит сделать. На данный момент имеется мало информации о добавлении, изменении и удалении элементов с доступным источником данных. Интересно, все ли массивы, которые я делаю, это путь к go. Я чувствую, что должен сделать больше со снимком. Должны ли все логи c из метода сохранения быть в методе обновления? Любая помощь оценена и / или любые ресурсы по этому вопросу
ProjectsViewController: UIViewController {
(...)
//DataSource methods (snapshot)
func updateData(on projects: [Project]) {
var snapshot = NSDiffableDataSourceSnapshot<Section, Project>()
snapshot.appendSections([Section.normal])
snapshot.appendItems(projects)
//apply() is safe to call from a background queue!
self.dataSource.apply(snapshot, animatingDifferences: true)
}
(...)
}
//MARK: - ProjectHandler (delegation method)
extension ProjectsViewController: ProjectHandler {
func save(_ project: Project, withImage image: UIImage?) {
//Make sure LastEdited Date gets updated
var projectToBeSaved = project
projectToBeSaved.lastEdited = Date()
//Current state
var projects = dataSource.snapshot().itemIdentifiers
//Replace the changed project
if projects.contains(projectToBeSaved) {
let index = projects.firstIndex(of: projectToBeSaved)
projects.remove(at: index!)
projects.append(projectToBeSaved)
//Add the new projects
} else {
projects.append(projectToBeSaved)
}
//sort on lastly edited
projects.sort { $0.lastEdited > $1.lastEdited }
//TODO: - Write to json
//update the snapshot
updateData(on: projects)
collectionView.reloadData()
}
}