Swift iOS 13 UITableView/UICollectionView委托中的NSDiffableDataSourceSnapshot

Swift iOS 13 UITableView/UICollectionView委托中的NSDiffableDataSourceSnapshot,swift,ios13,nsdiffabledatasourcesnapshot,Swift,Ios13,Nsdiffabledatasourcesnapshot,我一直在玩新的iOS 13 diffable数据源,发现它们非常容易使用 但是我不确定一件事。是否建议使用可扩散数据源的快照属性(例如在UITableViewDelegate中)来获取截面高度 这是我最初的方法 func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { let section = dataSource.snapshot().section

我一直在玩新的iOS 13 diffable数据源,发现它们非常容易使用

但是我不确定一件事。是否建议使用可扩散数据源的快照属性(例如在UITableViewDelegate中)来获取截面高度

这是我最初的方法

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
     let section = dataSource.snapshot().sectionIdentifiers[section]
     return section.footerHeight
}
dataSource
是我的可扩散数据源属性,
footerheath
是可扩散数据源使用的我的节枚举中的计算属性

我看过一些教程,它们创建了对最新快照的引用

var currentSnapshot: NSDiffableDataSourceSnapshot?
并在每次向表数据源应用新快照时更新它。所以我的原始代码现在可能是这样的

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
     let section = currentSnapshot?.sectionIdentifiers[section]
     return section?.footerHeight ?? 0
}
从苹果的文档来看,每次都会创建数据源的
snapshot()
方法,因此我觉得我的第一种方法不是很有效,因为对于每个部分,甚至可能是行,都会创建一个新的快照副本

方法2是更好的方法吗?或者创建快照非常有效,因此方法1可以吗


实际上,这两种方法是相同的。调用
apply