当我尝试使用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);
它给了我同样的错误“预期')'”
答案 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%@说明符的格式字符串)是一个很好的解决方案。 您也可以用类似的方式格式化这三个值。