Выбор IndexPath для UITableView, поддерживаемого UITableViewDiffableDataSource
Я пытаюсь выбрать индексы в UITableView с помощью UITableViewDiffableDataSource. Идея состоит в том, чтобы использовать
indexPath(for itemIdentifier: ItemIdentifierType)
чтобы найти indexPaths для выбора. Но моя проблема в том, что
indexPath()
ничего не находит, если ТО ЖЕ экземпляр ItemIdentifierType не передан и не был уже добавлен в DataSource. Это означает, что если вы обновили элементы из обновления API, а затем попытались найти indexPath, используя сохраненные элементы, он ничего не найдет. Идентичность объекта, выраженная в Hashable, не кажется здесь единственным фактором.
class PersonModel: Hashable {
var identifier: String?
func hash(into hasher: inout Hasher) {
hasher.combine(identifier)
}
static func == (lhs: PersonModel, rhs: PersonModel) -> Bool {
return lhs.identifier == rhs.identifier
}
}
class ViewController: UIViewController {
var diffableData: UITableViewDiffableDataSource<String, PersonModel>? = ...
func selectIndices() {
var snapshot = NSDiffableDataSourceSnapshot<String, PersonModel>()
snapshot.appendSections(["Section"])
var remotePerson: PersonModel = ... // get from API
snapshot.appendItems([remotePerson], toSection: "Section")
diffableData?.apply(snapshot)
var storedPerson: PersonModel = ... // get from storage, identifier matches remotePerson's
let indexToSelect = diffableData?.indexPath(for: storedPerson) // not working!
}
}
Какой разумный способ найти индекс для выбора? Поведение, которое я хочу, похоже, работает, если
PersonModel
была структурой, но я не хочу использовать структуры.