0

我注意到,在使用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
    }

}

whenStringCellObject是一个类,甚至不调用 Hashable 函数,并且对象始终被视为已更改(即使值相同)

当我将类更改为结构时

struct StringCellObject: Hashable {

我得到了正确的行为

为什么在使用类时行为会发生变化以及如何获得预期的行为?

4

1 回答 1

0

我认为您必须实现如下所示的 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()
}
于 2020-11-30T03:49:02.517 回答