iOS 13 NSDiffableDataSourceSnapshot в делегатах UITableView/UICollectionView
Я экспериментировал с новыми источниками диффузных данных iOS 13 и считаю их очень простыми и удобными в использовании.
Однако я не уверен в одном. Рекомендуется ли использовать свойство моментального снимка различных источников данных, например, в UITableViewDelegate, например, для получения высоты раздела?
Это был мой оригинальный подход
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = dataSource.snapshot().sectionIdentifiers[section]
return section.footerHeight
}
dataSource
являясь моим свойством доступного источника данных, и footerHeight
- это вычисляемое свойство в моем перечислении раздела, используемое в источнике данных diff.
Я видел несколько руководств, в которых создается ссылка на последний снимок
var currentSnapshot: NSDiffableDataSourceSnapshot?
и обновлять его каждый раз, когда они применяют новый снимок источника данных таблицы. Итак, мой исходный код теперь может быть примерно таким
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = currentSnapshot?.sectionIdentifiers[section]
return section?.footerHeight ?? 0
}
Судя по документации Apple, snapshot()
метод источника данных создается каждый раз, поэтому я чувствую, что мой 1-й подход не очень эффективен, поскольку для каждого раздела или, возможно, даже строки создается новая копия моментального снимка.
Подход 2 лучше? Или создание снимка очень эффективно, и подход 1 подходит?
1 ответ
На практике оба способа идентичны. Снимок создается один раз, соответственно, после вызоваapply