gpt4 book ai didi

ios - 带有省略号数组参数的子类化方法?

转载 作者:可可西里 更新时间:2023-11-01 05:02:02 26 4
gpt4 key购买 nike

我想子类化一个在 init header 中具有省略号语法的对象。即

-(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”数组仅获得第一个参数。如何传递无终止数组的对象?

最佳答案

声明可变初始化器的父类(super class)应该也声明一个非可变初始化器,它接受一个va_list(类似于printfvprintf,例如)。假设这种情况,父类(super class)同时具有:

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

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

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

关于ios - 带有省略号数组参数的子类化方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531100/

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