鉴于需要创建一个静态的集合视图,其中包含数百个部分中的数十万个项目,那么如何有效地创建NSDiffableDataSourceSnapshot
?
在Apple的示例代码中,UsingCollectionViewCompositionalLayoutsAndDiffableDataSources
遵循以下模式:
let itemsPerSection = 1000
let sections = Array(0..<250)
let snapshot = NSDiffableDataSourceSnapshot<Int, Int>()
var itemOffset = 0
sections.forEach {
snapshot.appendSections([$0])
snapshot.appendItems(Array(itemOffset..<itemOffset + itemsPerSection))
itemOffset += itemsPerSection
}
每个部分和每个项目必须是唯一的标识符。低效率在于创建1000个Int
数组,并进行250倍的处理。在此示例中,大约需要12秒才能在我的设备上生成。
是否存在另一种有效地生成此结构的方法,是否有任何避免预先生成该结构的方法,或者在快照的体系结构中这不可能吗?
答案 0 :(得分:0)
您可以像使用传统数据源一样逐步构建快照。首先,使用初始项目创建快照,然后在确定需要更多快照时,使用其他项目重新构建快照。
如果您不想在每次添加更多项目时从头开始重建快照,则可以从表的差异数据源的snapshot()
函数获取表的现有快照,然后使用快照的手动添加其他项。 insertItems
,insertSections
等功能。