我想添加一个返回Class
的方法,如下所示:
-(Class) validatorClass{
return [AddItemValidator class]; }
并像这样使用它:
self.validator = [[self validatorClass] alloc] initWithParentDirectory:self.parentDirectory];
我应该如何声明此方法的返回类型-(Class)
以仅允许返回从已定义类扩展的类?
我想返回-(Class<'NameValidator'>)
之类的内容,其中AddItemValidator
从NameValidator
延伸。
我该如何宣布?
答案 0 :(得分:1)
正如SomeGuy所提到的,在这种情况下你无法实现编译时的安全性。相反,您可以使用断言在运行时检查它(最好不要):
-(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];