UITableViewDiffableDataSource 和 UICollectionViewDiffableDataSource 在使用 class 与 struct 时工作方式不同
Posted
技术标签:
【中文标题】UITableViewDiffableDataSource 和 UICollectionViewDiffableDataSource 在使用 class 与 struct 时工作方式不同【英文标题】:UITableViewDiffableDataSource and UICollectionViewDiffableDataSource working different when class vs struct is used 【发布时间】:2020-05-12 14:48:32 【问题描述】:我注意到,在使用 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函数,对象总是被视为Changed(即使值相同)
当我将类更改为结构时
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()
【讨论】:
以上是关于UITableViewDiffableDataSource 和 UICollectionViewDiffableDataSource 在使用 class 与 struct 时工作方式不同的主要内容,如果未能解决你的问题,请参考以下文章