Я экспериментировал с новыми источниками диффузных данных 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 подходит?