2012-12-09 47 views
1

目標C中是否有可能在運行時修改對象類型而不會抱怨編譯器?運行時修改對象類型

例如

id object; 
在init方法

initWithType:(someEnumType) type 

然後取決於類型的對象設定爲一個類的類型。

如何在沒有編譯器標記錯誤的情況下完成此操作,該對象沒有聲明someMethod?

回答

1

最常見的方式做這樣的事情是在工廠方法,而不是一個初始化:

typedef enum { 
    etString, 
    etNumber 
} EnumType; 

@implementation MyFactory 

+(id)makeNewObjectWithType:(EnumType)et { 
    id res; 
    switch (et) { 
     case etString: 
      res = [NSString string]; 
      break; 
     case etNumber: 
      res = [NSNumber numberWithInt:12345]; 
      break; 
     default: 
      res = nil; 
      break; 
    } 
    return res; 
} 

@end