2012-03-07 26 views
0

我想在Objective-C中做一些iPhone應用程序,並沒有一個我知道的很好的解決方案。實例化一個枚舉類的家庭之一

我具有表示一個枚舉類A,B和C,從X繼承:

typedef enum ClassEnum { 
    X, 
    A, 
    B, 
    C 
} ClassEnum; 

當我的應用程序量較小,我用這個標識不同類型的類,當它們將被使用,應該做什麼,等等。現在它不斷增長,我遇到了一些問題。

我有另一個類是這些類的組容器。我想這樣做是有這樣的構造:

-(id) initWithClassType:(ClassEnum)type { 
    //create 10 instances of the given class and add them to an NSMutableArray 
} 

是否有這樣做的,而無需在有一個巨大的switch調用基於type適當的構造函數的方法嗎?我覺得這是做錯事情的錯誤方式。

謝謝!

回答

0

最後我做了以下內容:

Class class = nil; 

switch(type) { 
    case A: 
     class = [A class]; 
     break; 
    case B: 
     class = [B class]; 
     break; 
    case C: 
     class = [C class]; 
     break; 
    case X: 
     class = [X class]; 
     break; 
    default: 
     class = [X class]; 
     break; 
} 

其次,以[[class alloc] init]通話。

0

您可以傳遞一個字符串來表示要分配/ init的類的名稱,而不是枚舉。然後,您可以使用該字符串來獲取您需要的類對象,並使用NSClassFromString函數。事情是這樣的:

-(id)initWithClassName:(NSString *)className{ 
    Class *class = NSClassFromString(className); 
    MyMotherClass *object = [[class alloc]init]; 
    ... 
} 
相關問題