Objective C 可区分数据源的可散列对象

Objective C Hashable object for Diffable Data Source

我正在尝试在 Objective C 中实现一个带有可区分数据源的集合视图。我知道 Swift,UICollectionViewDiffableDataSource 的通用类型是符合 Hashable 和 Identifiable 协议的类型。但是我不知道这些对应于 Objective C.

所以我的问题是,如果我有这样的数据源 属性:

@property (strong, nonatomic) UICollectionViewDiffableDataSource<NSString *, MyItemType *> *dataSource;

那么我需要在 MyItemType 中实现什么才能使其正常工作?仅实施以下方法是否足够,或者这些方法不正确,我需要为 Objective C 实施其他方法?

我的模型对象需要采用什么协议?

MyItemType.h

这里是模型项的定义。这些以集合视图列表布局显示。

@interface MyItemType : NSObject

@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic, nullable) NSString *subtitle;
@property (strong, nonatomic, nullable) NSArray<MyItemType *> *children;
@property (strong, nonatomic, nullable) UIImage *image;

@end

来自declaration

class UICollectionViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> : NSObject where SectionIdentifierType : Hashable, ItemIdentifierType : Hashable

ItemIdentifierType 只能是 Hashable。 NSObject 已经符合 Hashable,但是,默认情况下它只比较实例标识(例如指针):

  • ==调用-isEqual:,默认-isEqual:比较self指针,
  • hashValue 调用 -hash,默认 -hash returns self 指针(转换为 NSUInteger)。

对于 MyItemType,作为 NSObject 的子类,仅覆盖 -isEqual:-hash.

就足够了

一些不错的链接: