1
目標C中是否有可能在運行時修改對象類型而不會抱怨編譯器?運行時修改對象類型
例如
id object;
在init方法
initWithType:(someEnumType) type
然後取決於類型的對象設定爲一個類的類型。
如何在沒有編譯器標記錯誤的情況下完成此操作,該對象沒有聲明someMethod?
目標C中是否有可能在運行時修改對象類型而不會抱怨編譯器?運行時修改對象類型
例如
id object;
在init方法
initWithType:(someEnumType) type
然後取決於類型的對象設定爲一個類的類型。
如何在沒有編譯器標記錯誤的情況下完成此操作,該對象沒有聲明someMethod?
最常見的方式做這樣的事情是在工廠方法,而不是一個初始化:
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