Правильный способ обновления переменной модели внутри UICollectionViewDiffableDataSource в iOS
Я разрабатываю приложение с UICollectionViewDiffableDataSource
. Все работает как шарм, на самом деле у меня естьcollectionView
обновляется автоматически, когда я добавляю новую модель. Однако я не могу видеть обновленную ячейку, когда обновляю один из моих нынешних элементов.
Вот пример:
У меня есть эта модель
final class Contact: Hashable {
var id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
hasher.combine(name)
}
static func == (lhs: Contact, rhs: Contact) -> Bool {
return lhs.id == rhs.id
}
}
который заполняет мой UICollectionView
. Если я попытаюсь обновить, например, его имя наdidSelectItem
, а затем вызвать мою функцию, которая анализирует различия с NSDiffableDataSourceSnapshot
, это не обновляет мой UICollectionView
. Если я добавлю ещеContact
на didSelect (только для теста), мой UICollectionView
обновился отлично как хочу.
1 ответ
Я только что решил сам. Я попытался изменить объявление класса наstruct
вместо того final class
. Я действительно не знаю почему, но кажется, что в массиве элементов, объявленных какClass
снимок проверяет, совпадает ли ссылка, но не ее содержимое. Таким образом, он не обновляет представление, когда я обновляю любую переменную, даже если я добавил их либо вhash required function
а также equatable required function