-isEqual:
カスタムクラスに実装しています。等式は、プロパティ値に基づいています。すべてのプロパティが等しい場合、オブジェクトは等しいと見なされます。従来のクラス チェックと合わせると、コードは次のようになります。
- (BOOL) isEqual: (id) object
{
return [object class] == [self class]
&& [[object someProperty] isEqual:someProperty]
&& [[object otherProperty] isEqual:otherProperty];
}
しかし、これはnil
プロパティ値では失敗します。nil
値が格納されているクラスの 2 つのオブジェクトはsomeProperty
等しくないと見なされますが、等しくしたいのです。したがって、次のバージョンに到達しました。
- (BOOL) isEqual: (id) object
{
#define equals(a, b) ((a == b) || ([a isEqual:b]))
return equals([object class], [self class])
&& equals([object someProperty], someProperty)
&& equals([object otherProperty], otherProperty);
}
これはうまくいくようです。これは、等式を解決するための「標準的な」方法ですか? 私には複雑すぎるようです。