0

如果我在 NSArray 中有来自以下 3 个类的对象,那么将数组元素分配给适当对象的最佳方法是什么?

@interface Simple : NSObject 
@interface Intermediate : Simple 
@interface Advanced : Simple

我想循环遍历 NSArray,如果数组的第二个元素是 Intermediate,第五个元素是 Advanced,我想分别将它们分配给 Intermediate 和 Advanced 的变量。这让我可以调用派生类中未在基类中定义的方法。

让我知道是否有比让 NSArray 包含不同对象更好的方法(我仍然有兴趣知道原始问题的答案)!

4

2 回答 2

5

您可以在使用isMemberOfClass:或循环时检查对象的类isKindOfClass:(更多关于这里的差异)。

也就是说,如果 - 正如我所怀疑的那样 - 这三个类共享共同的逻辑,你为什么不直接 makeSimple和一个共同祖先的子类,称为 -say - ,然后使用Intermediate类型变量?AdvanceDifficultyDifficulty

然后,无论子类如何,您都可以将数组中的任何对象分配给Difficulty变量。

于 2013-10-01T21:55:30.883 回答
0

您可以通过以下方式轻松测试数组条目的类类型:

id myObject = [myArray objectAtIndex:index];

if ([myObject isMemberOfClass:[Simple class]]) {
    //do something 
} else if ([myObject isMemberOfClass:[Intermediate class]]) {
    //do something 
} else if ([myObject isMemberOfClass:[Advanced class]]) {
    //do something 
}
于 2013-10-01T21:48:53.033 回答