2013-10-01 36 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

相關問題