如果我在NSArray中有以下3个类的对象,那么将数组元素分配给适当对象的最佳方法是什么?
@interface Simple : NSObject
@interface Intermediate : Simple
@interface Advanced : Simple
我想循环遍历NSArray,如果数组的第二个元素是Intermediate而第五个元素是Advanced,我想分别将它们分配给Intermediate和Advanced的变量。这允许我调用派生类中未在基类中定义的方法。
让我知道,如果有一个更好的解决方案,而不是让NSArray包含不同的对象(我仍然有兴趣知道原始问题的答案)!
答案 0 :(得分:5)
您可以在使用isMemberOfClass:
或isKindOfClass:
(更多关于差异here)进行循环时检查对象的类。
那说,如果 - 正如我怀疑的那样 - 这三个类共享共同的逻辑,为什么不只是创建一个共同祖先的Simple
,Intermediate
和Advance
子类, - 比如说 - Difficulty
,然后使用Difficulty
类型的变量?
然后,无论子类如何,您都可以将数组中的任何对象分配给Difficulty
变量。
答案 1 :(得分: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
}