2013-07-20 2 views
0

Я нахожусь в Objective-C, пытаясь создать пользовательскую функцию ведения журнала Variadic, в частности, я хотел бы «перестроить» строковые форматы, например, то, что вы отправляете в NSLog. Я попытался понять функции Variadic, но язык, используемый для описания различных аспектов, находится над моей головой, и все примеры, которые я нашел, - это суммирование целой цепочки, а не перестроение строковых форматов.Создать пользовательскую функцию регистрации варидизации

Чрезмерно простой пример того, что я пытаюсь сделать будет выглядеть так:

(void) myLog (NSString*string,...) { 
    NSLog(string,...); 
} 

То есть я хочу привести типичный формат строки в функцию и восстановить этот формат в виде строки внутри функции.

Как я уже сказал, это слишком простой пример, будет больше, чем просто отправить его обратно, и, следовательно, есть другие причины для меня, желающих это сделать. Эти причины в стороне: как мне перестроить строковый формат внутри функции Variadic?

UPDATE:

В настоящее время я использую следующий код:

- (void) output:(NSString*)string { 
    [_outputStorage appendAttributedString:[[NSAttributedString alloc] initWithString:string attributes:[NSDictionary dictionaryWithObject:[NSFont boldSystemFontOfSize:[NSFont smallSystemFontSize]] forKey:NSFontAttributeName]]]; 
    DDLogVerbose(@"%@", string); 
} 
... 
[self output:[NSString stringWithFormat:@"You started out with %i tabs and I deleted %i (%i%%) of them.\n", totalTabs, deletedTabs, totalTabs ? 100*deletedTabs/totalTabs : 0]]; 

В настоящее время это работает, но вызов (последняя строка выше) достаточно непроницаемый. Я хотел бы, чтобы сделать вызов, как это:

myLog(@"You started out with %i tabs and I deleted %i (%i%%) of them.\n", totalTabs, deletedTabs, totalTabs ? 100*deletedTabs/totalTabs : 0]); 

Технически говоря мой текущий код работает отлично, поэтому я хотел бы сделать это изменение, потому что второй путь SO гораздо более удобным для чтения! Строка, начинающаяся "MyLog (..." гораздо более удобным для чтения, чем "[само выходной: [NSString stringWithFormat: ..."

+0

Что вы имеете в виду «восстановить» Можете ли вы показать некоторый ввод и вывод образца вы знаете о 'NSLogv()' –

+0

Обновленных с небольшим количеством коды и более через объяснение –

ответ

1

Вы можете сделать это:

(void)myLog(NSString *format, ...) { 
    va_list args; 
    va_start(args, format); 
    NSString *msg = [[NSString alloc] initWithFormat:format arguments:args]; 
    va_end(args); 

    NSLog(@"%@", msg); 
} 

И назвать это, как вы хочешь:

myLog(@"You started out with %i tabs and I deleted %i (%i%%) of them.\n", totalTabs, deletedTabs, totalTabs ? 100*deletedTabs/totalTabs : 0]); 
+0

??. БЛАГОДАРИТЕ ВАМ СПАСИБО ВАМ! Это прекрасно работает! Вы перешли декларацию между функцией и но все, что мне нужно было сделать, это изменить первую строку: void myLog (формат NSString *, ...) {и все работает отлично! –

+0

Добро пожаловать. Я зафиксировал опечатку в объявлении. – rmaddy

Смежные вопросы