Правильный способ обновления переменной модели внутри 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

Другие вопросы по тегам