я погуглил и узнал это, как использовать аргументы переменной. но я хочу передать свои аргументы переменной другому методу. Я получаю ошибки. как сделать это?
-(void) aMethod:(NSString *) a, ... {
[self anotherMethod:a];
// i m doing this but getting error. how to pass complete vararg to anotherMethod
}
AFAIK ObjectiveC (как и C и C++) не предоставляет синтаксис, позволяющий сделать то, что вы непосредственно имеете в виду.
Обычным обходным путем является создание двух версий функции. Одна, которая может быть вызвана непосредственно с помощью ..., и другая, вызываемая другими функциями, передающими параметры в виде va_list.
.. [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]);
}