そのため、クラスを一種の構造体として使用している状況があります。メソッドをオーバーライドしたいisEqual:
ので、このタイプのオブジェクトが配列内にある場合は、使用できます[objects indexOfObject:obj]
しかし、obj
アヒルとニワトリと呼ばれるオブジェクトが含まれているとします。行きたい[objects indexOfObject:duck]
のですが、実際にはobj
だから私はこのようなことを試しました:
- (BOOL)isEqual:(id)anObject {
if([anObject isKindOfClass:[Duck class]]){
return [anObject isEqual:_duck];
}
else if([anObject isKindOfClass:[Chicken class]]){
return [anObject isEqual:_chicken];
}
return [anObject isEqual:self];
}
これは機能せず、呼び出されることさえありません...それはハッシュのオーバーライドに関係していると思います.self.hash(事実上obj.hash)を返すだけで試しましたが、うまくいきませんでした.
このようなことが可能だと思いますか?または、 for ループを使用してすべての my を検索し、obj
どのアヒルが含まれているかを見つけてobj
、そのインデックスを返す必要があります (これは可能です。同時にクールできちんとしたかっただけです)。