我想添加一种返回 Class
的方法,如下:
-(Class) validatorClass{
返回[additemvalidator class];}
并这样使用:
self.validator = [[self validatorClass] alloc] initWithParentDirectory:self.parentDirectory];
我应该如何声明此方法的返回类型-(Class)
以允许返回从定义类扩展的类?
我想返回诸如-(Class<'NameValidator'>)
之类的东西,其中AddItemValidator
从NameValidator
延伸。
我应该如何声明它?
正如某些人所提到的,在这种情况下,您无法实现编译时安全性。相反,您可以使用断言在运行时进行检查(总比没有好):
-(Class) validatorClass{
Class theClass = [AddItemValidator class];
NSAssert([theClass isSubclassOfClass:[NameValidator class]], @"Has to return subclass of %@", [NameValidator class]);
return theClass;
}
您甚至可以进一步应用工厂模式,以将验证器类与已验证的类授予验证器类:
@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];