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

Другие вопросы по тегам