如何在NSLog等方法中处理多个参数?

时间:2011-04-20 10:06:46

标签: objective-c

之前有人问过,但我不理解这个问题。我有自己的屏幕记录器,它有一个方法“追加”,它应该像NSLog一样工作,采用多个参数。

所以不要写这个:

int mynum = 19;
NSLog(@"This is a number %d",mynum);

我想这样做:

[Logger append:@"This is a number %d",mynum];

知道我怎么能这样做吗?

由于

3 个答案:

答案 0 :(得分:6)

好的,这是艰难的方式。 : - )

使用stdarg.h宏创建附加参数的va_list副本,然后使用-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()本身的所有灵活性,支持任何数量和类型的参数。

答案 1 :(得分:2)

你想要一个省略号,例如

-(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);
  // ...
}

答案 2 :(得分:0)

[Logger append:[NSString stringWithFormat:@"This is a number %d",mynum]];