如何声明返回基类的方法



我想添加一种返回 Class的方法,如下:

-(Class) validatorClass{

返回[additemvalidator class];}

并这样使用:

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

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

我想返回诸如-(Class<'NameValidator'>)之类的东西,其中AddItemValidatorNameValidator延伸。

我应该如何声明它?

正如某些人所提到的,在这种情况下,您无法实现编译时安全性。相反,您可以使用断言在运行时进行检查(总比没有好):

-(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];

最新更新