在Objective C中是否可以在没有编译器抱怨的情况下在运行时修改对象类型?
e.g。
id object;
在init方法中
initWithType:(someEnumType) type
然后根据类型将对象设置为类类型。
如果没有编译器标记对象未声明someMethod的错误,该如何完成?
答案 0 :(得分: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