Objective-Cでこの機能を実現することができます任意の方法は、遅延バインディングと動的型付けがされています。あなたはテンプレートも必要ではありません(彼らはジェネリックスと呼んでいます)、コンパイラもそれをバインドしません。単にid
を使用してください。
@interface CustomClass : NSObject
@property(nonatomic) id result;
-(void) update;
@end
-(void) update
{
//self.result = initialize result here
[self.result myMethod];
}
あなたが何らかの理由でタイプの制約を持つようにしたい場合は、単にプロトコルを使用します。
@protocol CustomProtocol
- (void)myMethod;
@end
@interface CustomClass : NSObject
@property(nonatomic) id<MyProtocol> result;
-(void) update;
@end
-(void) update
{
//self.result = initialize result here
[self.result myMethod];
}
議論のコメントで対象後:あなたがインスタンス化したい場合は
ジェネリック型の場合は、コンパイル時には実行しませんが、実行時に型を初期化子に渡すだけです。
の代わりに...:
var concrete = CustomClass<Concrete>()
...あなたが書く:
個人的に
CustomClass *concrete = [[CustomClass alloc] initForType:[Concrete class]];
私は新しいアロケータを好むが、これは別の議論です。型名も文字列として渡すことができます。個人的に私はそれも好きではありません。 :-)
初期化子は、次のようになります。Objective-Cの中
- (instancetype)initForType:(Class)type
{
if((self = [super init])
{
self.result = [type new];
}
return self;
}
しかし、どのように更新メソッドで結果を初期化できますか? – Gulshan
?私は本当にあなたが割り当てたいものを知ることができません。タイプではなくインスタンスを割り当てる必要があります。セッターを使って値を入力するだけです。 CustomClassが初期化されたときに 'result'がプライベートで初期化されるべきですか? –
CustomClassが初期化されたときに結果を初期化したい。私はそれを初期化してCustomClassに渡すことができます。私はCustomClassの結果の初期化を行うことができるかどうかを知りたいです – Gulshan