UITableViewDiffableDataSource и UICollectionViewDiffableDataSource работают по-разному, когда используется класс vs структура
Заметил при использовании UITableViewDiffableDataSource
/ UICollectionViewDiffableDataSource
, ItemIdentifierType
когда используешь
var managedDataSource: UITableViewDiffableDataSource<String, StringCellObject>!
class StringCellObject: Hashable {
let value: String
func hash(into hasher: inout Hasher) {
hasher.combine(value)
}
static func == (lhs: StringCellObject, rhs: StringCellObject) -> Bool {
return lhs.value == rhs.value
}
init(value: String) {
self.value = value
}
}
когда StringCellObject
является классом, функции Hashable даже не вызываются, а объекты всегда обрабатываются как измененные (даже значение одинаковое)
когда я меняю класс на структуру
struct StringCellObject: Hashable {
я получаю правильное поведение
Почему происходит изменение поведения и как добиться ожидаемого поведения при использовании классов?
1 ответ
Я думаю, вам нужно реализовать метод Hashable, как показано ниже.
class Item: Hashable {
static func == (lhs: Item, rhs: Item) -> Bool {
lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
let id = UUID()
}