我无法理解Objective-C中多个参数的语法。我见过this question,但答案对我(还)没有帮助。
这是我的代码(实际上我希望最终传递给NSString stringWithFormat,但是现在让NSLog工作就足够了):
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
[self log:@"blah blah %d", 32];
}
- (void)log:(NSString *)text, ... {
va_list args;
va_start(args, text);
NSLog(text, args);
}
参数(或某个参数)通过,但它有一些奇怪的值(输出为blah blah 1606412704
)。我应该如何通过...
传递值?
答案 0 :(得分:21)
NSLog
的变体接受名为NSLogv
的va_list
:
- (void) log:(NSString *)text, ... {
va_list args;
va_start(args, text);
NSLogv(text, args);
va_end(args);
}
转发实际...
(不是va_list
)的唯一方法是使用宏。例如:
#define MyLog(f, ...) { \
NSLog(f, ##__VA_ARGS__); \
[someObject doSomething:f, ##__VA_ARGS__]; \
}
但是,这应该非常谨慎地使用,因为宏可以使代码真正混淆。
答案 1 :(得分:12)
您可以使用-[NSString initWithFormat:arguments:]
:
- (void)log:(NSString *)text, ...
{
va_list args;
va_start(args, text);
NSString *log_msg = [[[NSString alloc] initWithFormat:text arguments:args] autorelease];
NSLog(@"%@", log_msg);
}