有效创建包含大量部分和项目的 NSDiffableDataSourceSnapshot

Jor*_*n H 3 uicollectionview ios13

考虑到需要创建一个包含数百个部分的数十万项的静态集合视图,如何有效地创建NSDiffableDataSourceSnapshot

在Apple的示例代码中,UsingCollectionViewCompositionalLayoutsAndDiffableDataSources它们遵循以下模式:

let itemsPerSection = 1000
let sections = Array(0..<250)
var snapshot = NSDiffableDataSourceSnapshot<Int, Int>()
var itemOffset = 0
sections.forEach {
    snapshot.appendSections([$0])
    snapshot.appendItems(Array(itemOffset..<itemOffset + itemsPerSection))
    itemOffset += itemsPerSection
}
Run Code Online (Sandbox Code Playgroud)

每个部分和项目都必须是唯一的标识符。效率低下的原因在于创建 1000 个数组Int,并执行 250 倍。在此示例中,在我的设备上生成大约需要 12 秒。

是否有不同的方法可以有效地生成此结构,是否有任何方法可以避免预先生成它,或者这对于快照架构来说是不可能的吗?

小智 5

您可以像使用传统数据源一样逐步构建快照。首先,使用初始项目创建快照,当您确定需要更多项目时,使用附加项目重建快照。

\n\n

如果您不想每次添加更多项目时都从头开始重建快照,则可以从其 diffable 数据源 xe2x80x99s 函数获取表 xe2x80x99s 现有快照,snapshot()然后使用 snapshot\xe2\x80\x99s 函数手动添加附加项目,例如insertItemsinsertSections等。

\n