[英]how to declare method which returns base Class
我想添加一個返回Class
的方法,如下所示:
-(Class) validatorClass{
返回[AddItemValidator類]; }
並像這樣使用它:
self.validator = [[self validatorClass] alloc] initWithParentDirectory:self.parentDirectory];
我應該如何聲明此方法的返回類型-(Class)
以允許僅返回從定義的類擴展的類?
我想返回類似-(Class<'NameValidator'>)
,其中AddItemValidator
從NameValidator
擴展。
我應該如何申報?
正如SomeGuy所提到的,在這種情況下,您無法實現編譯時的安全性。 相反,您可以使用斷言在運行時對其進行檢查(總比沒有好):
-(Class) validatorClass{
Class theClass = [AddItemValidator class];
NSAssert([theClass isSubclassOfClass:[NameValidator class]], @"Has to return subclass of %@", [NameValidator class]);
return theClass;
}
您甚至可以在此處進一步應用Factory模式,以將驗證器類與正在驗證的類分離:
@implementation NameValidatorFactory
+(NameValidator*)validatorForObject:(YourObjectType*)validatedObject {
//choose proper validator depending on your object's type or anything you want
if([validatedObject isKindOfClass:[YourObjectTypeSuperclass class]]) {
return [AddItemValidator alloc];
}
else {
// handle other cases
}
}
然后像這樣創建您的驗證器:
self.validator = [[NameValidatorFactory validatorForObject:self] initWithParentDirectory:self.parentDirectory];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.