我一直在使用新的 iOS 13 可区分数据源,发现它们使用起来非常简单直接。
但是我不确定一件事。是否建议使用 diffable 数据源的快照属性,例如在 UITableViewDelegate 中获取部分高度?
这是我原来的方法
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = dataSource.snapshot().sectionIdentifiers[section]
return section.footerHeight
}
dataSource
是我的 diffable 数据源属性,并且footerHeight
是我的 Section 枚举中的一个计算属性,由 diffable 数据源使用。
我看过一些创建对最新快照的引用的教程
var currentSnapshot: NSDiffableDataSourceSnapshot?
并在他们每次对表数据源应用新快照时更新它。所以我的原始代码现在可能是这样的
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = currentSnapshot?.sectionIdentifiers[section]
return section?.footerHeight ?? 0
}
从Apple文档来看,snapshot()
每次都会创建数据源的方法,所以我觉得我的第一种方法不是很有效,因为对于每个部分,甚至可能是行,都会创建一个新的快照副本。
方法2是更好的方法吗?还是创建快照非常有效,因此方法 1 很好?