Objective-C中實現這一功能後期綁定和動態類型。你不需要模板(ooops,他們稱之爲泛型),也不需要編譯器綁定它。只需使用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]];
我個人更喜歡新的分配器,但是這是另一個討論。您也可以將類型名稱作爲字符串傳遞。我個人也不喜歡那樣。 :-)
的初始化看起來是這樣的:
- (instancetype)initForType:(Class)type
{
if((self = [super init])
{
self.result = [type new];
}
return self;
}
但是我怎樣才能初始化更新方法的結果? – Gulshan
?我真的不知道,你想分配什麼。您應該分配一個實例,而不是一個類型。只需使用setter在那裏放置一個值。如果'CustomClass'被初始化,結果應該是private還是初始化? –
我想初始化CustomClass初始化結果。我知道我可以初始化它並將它傳遞給CustomClass。我想知道我是否可以在CustomClass中執行初始化結果 – Gulshan