【发布时间】:2020-01-11 13:09:44
【问题描述】:
我一直在使用新的 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 很好?
【问题讨论】:
标签: swift ios13 nsdiffabledatasourcesnapshot