gpt4 book ai didi

objective-c - 如何将可变数量的参数从带有可变数量参数的 method1 传递给 method2?

转载 作者:太空狗 更新时间:2023-10-30 03:26:05 27 4
gpt4 key购买 nike

假设我们有方法:

-(instancetype) initWithElements:(id)firstElement, ... NS_REQUIRES_NIL_TERMINATION;
+(instancetype) objWithElements:(id)firstElement, ... NS_REQUIRES_NIL_TERMINATION;

我了解如何在 -initWithElements: 中使用可变数量的参数,但我不了解如何将变量从 -objWithElements: 传递到 -initWithElements:

我的意思是,我想写这样的东西:

+(instancetype) objWithElements:(id)firstElement, ... NS_REQUIRES_NIL_TERMINATION {
return [[[self] initWithElements:ELEMENTS] autorelease];
}

有可能吗?

对于我的问题,我看到的唯一解决方案是将参数存储在数组中并使用将使用给定数组初始化对象的辅助方法。

最佳答案

不,在 C(和 Objective-C)中,不可能传递可变参数。

惯用的解决方案是让自己获得一个接受 va_list 的初始化器,将 that 作为指定的初始化器,然后从其他每个方法调用它。在可变参数方法中,这看起来像:

- (instancetype)initWithVarargs:(id)first, ...
{
va_list args;
va_start(args, first);
id obj = [self initWithFirst:first VAList:args];
va_end(args);
return obj;
}

这里是一个指定的初始化程序,它接受一个 va_list 参数:

- (id)initWithFirst:(id)first VAList:(va_list)args
{
id obj;
while ((obj = va_arg(args, id)) != nil) {
// do actual stuff
}
// the return self, etc.
}

j

关于objective-c - 如何将可变数量的参数从带有可变数量参数的 method1 传递给 method2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21017648/

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