[英]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.