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

g.r*_*ion 3 macos objective-c nslog ios

当我尝试使用NSLog时:

NSLog(@"one" @"two" @"three");
Run Code Online (Sandbox Code Playgroud)

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

NSString *s = [NSString stringWithFormat:@"three"];  
NSLog(@"one" @"two" s);
Run Code Online (Sandbox Code Playgroud)

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

任何帮助?

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

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

编辑:

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

NSString *s = @"ss";
NSLog(@"one" @"two" @"%@",s);
Run Code Online (Sandbox Code Playgroud)

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

LOG_X(val) NSLog(@"xx" @"yy" @"%@",val @"zz")
Run Code Online (Sandbox Code Playgroud)

现在当以下工作时:

LOG_X(@"one")
LOG_X(@"one" @"two" @"three")
Run Code Online (Sandbox Code Playgroud)

但是以下不起作用

NSString *s = @"one two three";
LOG_X(s);
Run Code Online (Sandbox Code Playgroud)

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

The*_*ken 7

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

所以代替:

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

使用:

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

加成:

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

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


das*_*ght 6

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

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