Как я могу обработать несколько параметров в методе, как NSLog? - PullRequest
2 голосов
/ 20 апреля 2011

Об этом уже спрашивали, но я не могу обдумать это. У меня есть свой собственный Logger на экране, и у него есть метод "append", который должен работать почти как NSLog, принимая несколько параметров.

Так что вместо того, чтобы писать это:

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

Я хочу сделать это:

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

Есть идеи, как мне это сделать?

Спасибо

Ответы [ 3 ]

6 голосов
/ 20 апреля 2011

Хорошо, вот трудный путь.: -)

Используйте макросы 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 (), поддерживая любое количество и тип аргументов.

2 голосов
/ 20 апреля 2011

Вы хотите многоточие, например,

-(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);
  // ...
}
0 голосов
/ 20 апреля 2011
[Logger append:[NSString stringWithFormat:@"This is a number %d",mynum]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...