2

我一直在使用新的 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 很好?


4

1 回答 1

1

在实践中,这两种方式是相同的。调用后分别创建一次快照apply

于 2020-01-07T12:17:52.930 回答