gpt4 book ai didi

ios - 如何声明返回基类的方法

转载 作者:行者123 更新时间:2023-11-29 03:17:25 24 4
gpt4 key购买 nike

我想添加一个返回 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;
}

您甚至可以更进一步,在此处应用工厂模式,将验证器类与正在验证的类解耦:

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

关于ios - 如何声明返回基类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21529430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com