uicollectionview - 使用不同的数据源添加、更改和删除
问题描述
好的,我有一个带有可区分数据源的集合视图的初步工作版本。一切正常,我刚刚实现了添加和更改项目,以及删除仍有待完成的项目。目前关于使用可区分数据源添加、更改和删除项目的信息很少。我想知道我做的所有数组的东西是否都是正确的方法。我觉得我应该对快照做更多的事情。保存方法中的所有逻辑都应该在更新方法中吗?任何帮助表示赞赏和/或有关此事的任何资源
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()
}
}
解决方案
推荐阅读
- reactjs - 用户拖动和结束拖动元素时如何防止打开链接?
- python - 即使满足条件,if 语句也不会运行
- flutter - 如何在 Flutter Web 中启动 WhatsApp 或从浏览器启动 WhatsApp?
- ansible - Ansible +外部shell脚本如何循环输出
- python - 我需要从链接列表中访问一个元素,就像我在普通列表中所做的那样,但不能 - python
- r - 结合 base 和 dplyr:使用 as.matrix() 强制在最终对象中创建行号
- r - 从 R 中的向量中的元素创建唯一可能的组合
- sql - 使用映射表数据值动态选择数据
- python - 在 Python 中排除隐藏文件
- python - 通过 WLAN 进行套接字编程