1

Objective Cで、コンパイラが文句を言わずに実行時にオブジェクトタイプを変更することは可能ですか?

例えば

id object;

initメソッドで

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 に答える