假设我有这个-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
因此,如果ORdateString
相等且 相等,则认为两个对象title
相等。我们在这里假设date
并且dateString
不能为零,否则我们也必须检查它。date
我们进一步假设和之间没有已知的关系dateString
。
如何实现相应的-hash
方法以实现两个相等对象必须具有相同哈希的要求?
我试图通过遵循这个伟大的算法来实现它,但我很难将两个日期的 OR 条件转换为适当的哈希方法。
(诚然,这个问题有点学术性,因为人们可以质疑这种平等是否有意义。由于我有兴趣找到一个通用的解决方案,请不要发布答案我应该改变我的isEqual:
。除非它可以正式证明没有合适的-hash
方法存在。)