如何使用多个参数将NSString放在NSLog中

时间:2013-06-02 02:48:34

标签: ios objective-c macos nslog

当我尝试使用NSLog时:

NSLog(@"one" @"two" @"three");

这适用于在控制台中打印onetwothree。但是当我尝试使用这样的时候

NSString *s = [NSString stringWithFormat:@"three"];  
NSLog(@"one" @"two" s);

以上不起作用,我得到编译时错误“预期')'”。我不知道该怎么做。

任何帮助?

P.S。我正在尝试使用XcodeColors,我必须像上面那样给NSLog提供参数。所以不要回答使用它如​​下。我知道这很有效。但是我必须像上面那样将参数传递给NSLog。

NSString *s = [NSString stringWithFormat:@"%@ %@ %@", @"one", @"two", @"three"];  
NSLog(s, nil);

修改

我可以像这样使用NSLog来获得我想要的结果:

NSString *s = @"ss";
NSLog(@"one" @"two" @"%@",s);

导致我的另一个问题。我想为NSLog制作一个宏。宏看起来像:

LOG_X(val) NSLog(@"xx" @"yy" @"%@",val @"zz")

现在,当以下工作:

LOG_X(@"one")
LOG_X(@"one" @"two" @"three")

但是以下不起作用

NSString *s = @"one two three";
LOG_X(s);

它给了我同样的错误“预期')'”

2 个答案:

答案 0 :(得分:7)

如果要在NSString中打印出NSLog变量的内容,则需要将其视为格式化字符串。

所以而不是:

NSLog(@"one" @"two" s);

使用:

NSLog(@"one" @"two" @"%@", s);

<强>此外:

您必须在宏的末尾插入逗号和val。它应该看起来像:

#define LOG_X(val) NSLog(@"xx" @"yy" @"%@" @"zz", val)

答案 1 :(得分:6)

你不能用变量做到这一点:它与字符串文字一起使用的原因是当你用空格分隔几个文字时,编译器会将它们合并为一个字符串文字。

您拥有的解决方案(使用3%@说明符的格式字符串)是一个很好的解决方案。 您也可以用类似的方式格式化这三个值。