2013-10-01 40 views
0

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

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

我想通过的NSArray如果数组的第二个元素是中级和第5个元素是先进,我想将它们分别分配到中级和高级的变量循环。这让我可以调用派生类中未在基类中定义的方法。

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

+0

你能提供更多的上下文吗?不仅难以分辨你想做什么,而且为什么。 – jlehr

+0

我有一个标签栏,链接到各种文档形式。简单的表单可以加载/保存/编辑字段,中间表单可以动态地添加/删除/编辑表单中的其他字段(脚本),而高级表单可以添加/编辑/删除其他_forms_字段。它们都从Simple继承,因为这可以避免重新实现通用基础结构;表单对象存储在与标签栏对应的数组中。 – pan0rama

回答

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 
} 
5

可以检查对象的类,而使用任一isMemberOfClass:isKindOfClass:(更多关于差异here)循环。

也就是说,如果 - 我怀疑 - 这三个类有着共同的逻辑,为什么不干脆让SimpleIntermediateAdvance子一个共同的祖先,叫做 - 说 - Difficulty,然后使用Difficulty变量类型?

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

+0

我可能会误解这一点,但这里有我的两个问题: 1.不能简单地被认为是这里的共同祖先(因为中级和高级都来自它)? 2.如果我使用了难度变量,那仍然不允许我访问仅在高级中定义的方法,对吗? 除了检查是否为KindOfClass的if条件之外,我想不出“更好”的方式来做#2。 – pan0rama

相关问题