objective-c – 如何将来自method1的可变数量的参数传递给method2,该方法接受可变数量的参数?

前端之家收集整理的这篇文章主要介绍了objective-c – 如何将来自method1的可变数量的参数传递给method2,该方法接受可变数量的参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有方法
-(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];
}

甚至有可能吗

我看到的问题的唯一解决方案是将参数存储在数组中,并使用具有给定数组的init对象的帮助方法.

解决方法

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

惯用的解决方案是让一个初始化器接受va_list,使其成为指定的初始化程序,然后从其他方法调用它.从一个可变的方法,这将看起来像:

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

Ĵ

原文链接:https://www.f2er.com/c/114590.html

猜你在找的C&C++相关文章