1

在 Objective C 中是否可以在运行时修改对象类型而编译器不会抱怨?

例如

id object;

在初始化方法中

initWithType:(someEnumType) type

然后根据类型将对象设置为类类型。

如果没有编译器标记对象未声明 someMethod 的错误,如何做到这一点?

4

1 回答 1

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
于 2012-12-09T19:25:45.377 回答