【发布时间】:2012-12-29 17:45:05
【问题描述】:
假设我有这个-isEqual: 方法:
- (BOOL)isEqual:(MyObject*)aObject {
if (![aObject isKindOfClass:[MyObject class]]) {
return NO;
}
return ([self.dateString isEqualToString:aObject.dateString] || [self.date isEqual:aObject.date]) &&
((!self.title && !aObject.title) || [self.title isEqualToString:aObject.title]);
}
因此,如果date 或dateString 相等且title 相等,则认为两个对象相等。我们在这里假设date 和dateString 不能为零,否则我们也必须检查它。我们进一步假设,date 和 dateString 之间没有已知的关系。
如何实现对应的-hash 方法,以满足两个相等对象必须具有相同哈希的要求?
我尝试通过遵循 great algorithm 来实现它,但我很难将两个日期的 OR 条件转换为适当的哈希方法。
(诚然,这个问题有点学术性,因为人们可能会质疑这种平等是否有意义。由于我有兴趣找到一个通用的解决方案,请不要发布答案,我应该更改我的 isEqual: . 除非可以正式证明不存在合适的-hash 方法。)
【问题讨论】:
标签: objective-c cocoa equality