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 - вычисляемым свойством в моем перечислении Раздела, используемым источником дифференциальных данных.

Я видел несколько руководств, в которых создается ссылка на последний снимок

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 подходит?



person crashoverride777    schedule 09.09.2019    source источник


Ответы (1)


На практике оба способа идентичны. Снимок создается один раз, соответственно, после вызова apply

person vadian    schedule 07.01.2020