如何将可变parameter passing给另一个方法?

我GOOGLE了,并知道如何使用可变参数。 但我想通过我的可变参数到另一种方法。 即时通讯错误。 怎么做 ?

-(void) aMethod:(NSString *) a, ... { [self anotherMethod:a]; // im doing this but getting error. how to pass complete vararg to anotherMethod } 

AFAIK ObjectiveC(就像C和C ++一样)不提供给你一个允许直接考虑的语法。

通常的解决方法是创build一个函数的两个版本。 一个可以直接使用…而另一个被别人调用的函数以va_list的forms传递参数。

 ..
 [obj aMethod:@“test this%d parameter”,1337);
 [obj anotherMethod:@“test that%d parameter”,666);
 ..

 - (void)aMethod:(NSString *)a,... 
 {
     va_list ap;
     va_start(ap,a);

     [self anotherMethod:a withParameters:ap]; 

     va_end用来(AP);
 }

 - (void)anotherMethod:(NSString *)a,...
 {
     va_list ap;
     va_start(ap,a);

     [self anotherMethod:a withParameters:ap]; 

     va_end用来(AP);
 }

 - (void)anotherMethod:(NSString *)a withParameters:(va_list)valist 
 {
     NSLog([[[NSString alloc] initWithFormat:a arguments:valist] autorelease]);
 }

你不能直接传递可变参数。 但是其中一些方法提供了一个可以传递va_list参数的替代方法

 #include <stdarg.h> -(void)printFormat:(NSString*)format, ... { // Won't work: // NSString* str = [NSString stringWithFormat:format]; va_list vl; va_start(vl, format); NSString* str = [[[NSString alloc] initWithFormat:format arguments:vl] autorelease]; va_end(vl); printf("%s", [str UTF8String]); } 

你有没有考虑在数组或字典中设置参数,并有条件地进行编码?

 -(void) aMethodWithArguments:(NSArray *)arguments { for (id *object in arguments) { if ([object isKindOfClass:fooClass]) { //handler for objects that are foo [self anotherMethod:object]; } if ([object isKindOfClass:barClass]) { //and so on... [self yetAnotherMethod:object]; } } } 

我想你可以使用macros来实现同样的事情。 假设你想将方法的可变parameter passing给另一个参数

 -(void) aMethod:(NSString *) a, ... { } 

你可以使用macros定义你的另一个“方法”,虽然它不是一个真正的方法:

 #define anotherMethod(_a_,...) [self aMethod:_a_,##__VA_ARGS__] 

这是我的解决scheme。