3

当我尝试使用 NSLog 时:

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

这可以在控制台中打印 onetwothree 。但是当我尝试像这样使用时

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

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

有什么帮助吗?

PS 我正在尝试使用 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);

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

4

2 回答 2

8

If you want to print out the contents of an NSString variable in NSLog, you need to treat it like a formatted string.

So instead of:

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

Use:

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

ADDITION:

You must insert the comma and val at the end of the macro. It should look like:

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

于 2013-06-02T02:52:13.863 回答
6

你不能用变量来做:它与字符串文字一起工作的原因是当你写几个用空格分隔的文字时,编译器会为你将它们组合成一个字符串文字。

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

于 2013-06-02T03:01:42.510 回答