objective-c – 如何将来自method1的可变数量的参数传递给method
发布时间:2020-12-16 05:29:51 所属栏目:百科 来源:网络整理
导读:假设我们有方法: -(instancetype) initWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION;+(instancetype) objWithElements:(id)firstElement,... NS_REQUIRES_NIL_TERMINATION; 我明白,如何在-initWithElements中使用可变数量的参数,但是我
假设我们有方法:
-(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. } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |