Objective Cで、コンパイラが文句を言わずに実行時にオブジェクトタイプを変更することは可能ですか?
例えば
id object;
initメソッドで
initWithType:(someEnumType) type
次に、タイプに応じて、オブジェクトをクラスタイプに設定します。
オブジェクトがsomeMethodを宣言しないというコンパイラのフラグエラーなしで、これはどのように行われますか?
Objective 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