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 中是否安全。
处理这种情况的更好方法是什么?