Objective c 如何在NSLog这样的方法中处理多个参数?
以前有人问过这个问题,但我不明白。我有自己的屏幕记录器,它有一个“append”方法,该方法应该和NSLog一样工作,使用多个参数 因此,与其写这封信:Objective c 如何在NSLog这样的方法中处理多个参数?,objective-c,Objective C,以前有人问过这个问题,但我不明白。我有自己的屏幕记录器,它有一个“append”方法,该方法应该和NSLog一样工作,使用多个参数 因此,与其写这封信: int mynum = 19; NSLog(@"This is a number %d",mynum); 我想这样做: [Logger append:@"This is a number %d",mynum]; 你知道我该怎么做吗 谢谢你想要一个省略号,例如 -(SomeResult*)append:(id)object,... { i
int mynum = 19;
NSLog(@"This is a number %d",mynum);
我想这样做:
[Logger append:@"This is a number %d",mynum];
你知道我该怎么做吗
谢谢你想要一个省略号,例如
-(SomeResult*)append:(id)object,... {
id obj;
va_list argumentList;
va_start(argumentList, obj);
while (obj = va_arg(argumentList, id)) // Do something with obj
va_end(argumentList);
// ...
}
好吧,这是艰难的道路。:-) 使用stdarg.h宏创建附加参数的va_列表副本,然后使用
-initWithFormat:arguments:
方法创建一个字符串:
-(void) append:(NSString*)format, ... {
va_list args, args_copy;
va_start(args, format);
va_copy(args_copy, args);
va_end(args);
NSString *logString = [[NSString alloc] initWithFormat:format
arguments:args_copy];
// Append logString to your logger
va_end(args_copy);
[logString release];
}
这种方式为您提供了NSLog()本身的所有灵活性,支持任意数量和类型的参数。注意,如果您只是想像您所说的那样进行日志记录,那么@Terente solution会更好,但不完全如此。:-)Stdarg宏是实现这一点的方法,但是您的示例只支持对象参数,并且在参数列表的末尾需要nil sentinel,而不是使用格式字符串。您也没有正确使用va_start()-应该是
va_start(argumentList,object)
@Sherm,好的,我的辩护是,我只是介绍了如何使用变量函数,当然不打算生成一些函数代码。(+1虽然指出了这一点)好吧,是的,那将是最简单的方法;)但既然我在这个话题上,我真的想努力尝试。
-(void) append:(NSString*)format, ... {
va_list args, args_copy;
va_start(args, format);
va_copy(args_copy, args);
va_end(args);
NSString *logString = [[NSString alloc] initWithFormat:format
arguments:args_copy];
// Append logString to your logger
va_end(args_copy);
[logString release];
}