簡體   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