私がこの-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]);
}
したがって、2 つのオブジェクトは、date
ORdateString
が等しく、かつ が等しい場合、等しいと見なされますtitle
。ここではdate
anddateString
が nil であってはならないと仮定します。そうでなければ、それもチェックする必要があります。date
さらに、 と の間に既知の関係はないと仮定しdateString
ます。
-hash
2 つの等しいオブジェクトが同じハッシュを持つ必要があるという要件を満たすように、対応するメソッドをどのように実装できますか?
この優れたアルゴリズムに従って実装しようとしましたが、2 つの日付の OR 条件を適切なハッシュ メソッドに変換する方法に苦労しています。
(確かに、この種の平等が意味をなすかどうか疑問に思う可能性があるため、この質問はやや学術的です。私は一般的な解決策を見つけることに興味があるので、答えを投稿しないでくださいisEqual:
。適切な-hash
方法が存在しないことが証明されています。)