繁体   English   中英

如何声明返回基类的方法

[英]how to declare method which returns base Class

我想添加一个返回Class的方法,如下所示:

-(Class) validatorClass{

返回[AddItemValidator类]; }

并像这样使用它:

self.validator = [[self validatorClass] alloc] initWithParentDirectory:self.parentDirectory];

我应该如何声明此方法的返回类型-(Class)以允许仅返回从定义的类扩展的类?

我想返回类似-(Class<'NameValidator'>) ,其中AddItemValidatorNameValidator扩展。

我应该如何申报?

正如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM