使用省略号数组参数子类化方法?

2024-03-16

我想对 init 标头中具有省略号语法的对象进行子类化。 IE。

-(void) initObjectWith:(NSString*)argument arguments:(NSString*)someArgument,...;

我不确定在这种情况下如何传递参数数组。我怀疑它会是这样的:

- (void) initObjectWithCustomInitializer:(NSString*)argument additionalArgument:(NSString*)additionalArgument argument:(NSString*) someArgument,... {
  self = [super initObjectWith:argument arguments:someArgument,...];
  if (self) {
     //custom init code here
  }
  return self
}

这可以编译,但以 nil 结尾的“arguments”数组仅获取第一个参数。如何传递以 nil 结尾的数组的对象?


声明该可变参数初始值设定项的超类should还声明一个非可变参数,它需要va_list(类似于如何printf has vprintf, 例如)。假设这种情况,超类同时具有:

-(void)init:(id)a arguments:(id)b, ...;

and

-(void)init:(id)a arguments:(id)b variadicArgs:(va_list)args;

你会做类似的事情:

- (void)myInit:(id)a newArg:(id)c arguments:(id)b, ...
{
    va_list v;
    va_start(v, b);

    self = [super init:a arguments:b variadicArgs:v];
    if (self) {
        //custom init code here
    }

    va_end(v);
    return self;
}

当然,您应该确保您的新初始化器也有一个非可变版本!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用省略号数组参数子类化方法? 的相关文章

随机推荐