Animal
BOOL
というプロパティを持つクラスalive
です。Monkey
、Zebra
およびWalrus
のサブクラスですAnimal
。、およびのインスタンスの混合を含むNSArray
と呼ばれるのインスタンスがあり、最初の生きているインスタンスを見つけたい場合、次のようにすることができます。zoo
Monkey
Zebra
Walrus
Zebra
Zebra *zebra;
for (Animal *animal in zoo) {
if ([animal isMemberOfClass:[Zebra class]] && animal.alive) {
zebra = animal;
break;
}
}
問題は、私が設定したときにコンパイラが互換性のないポインタ型について不平を言うことzebra = animal
です。そのようなキャストを行うとうまくzebra = (Zebra *)animal
いくようですが、そのようなキャストがObjective-Cで安全かどうかはわかりません。
このような状況に対処するためのより良い方法は何ですか?