Animal是一个具有BOOL名为 的属性的类alive。Monkey,Zebra并且Walrus是 的子类Animal。如果我有一个包含 , 和 的混合实例的NSArray被调用实例,并且我想找到第一个活动的实例,我可能会执行以下操作:zooMonkeyZebraWalrusZebra
Zebra *zebra;
for (Animal *animal in zoo) {
if ([animal isMemberOfClass:[Zebra class]] && animal.alive) {
zebra = animal;
break;
}
}
问题是编译器在我设置时抱怨指针类型不兼容zebra = animal。如果我像这样进行一些转换,zebra = (Zebra *)animal它似乎可以工作,但我不确定这种转换在 Objective-C 中是否安全。
处理这种情况的更好方法是什么?