【问题标题】:iOS 13 NSDiffableDataSourceSnapshot in UITableView/UICollectionView delegatesUITableView/UICollectionView 委托中的 iOS 13 NSDiffableDataSourceSnapshot
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2023-03-21
      • 2023-04-11
      • 1970-01-01
      • 2013-01-25
      • 2020-01-30
      相关资源
      最近更新 更多