【问题标题】:how to put NSString in NSLog with multiple arguments如何使用多个参数将 NSString 放入 NSLog
【发布时间】:2013-06-02 02:48:33
【问题描述】:

当我尝试使用 NSLog 时:

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

这工作并在控制台中打印 onetwothree。但是当我尝试这样使用时

NSString *s = [NSString stringWithFormat:@"three"];  
NSLog(@"one" @"two" 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);

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

【问题讨论】:

  • 你在哪里得到第二个错误?
  • 我在 LOG_X 出现错误
  • 我只能在最后一个字符串中使用@"%@",s。不在这之间,这就是我收到错误的原因。
  • NSLog(@"x" @"%@",@"xx" @"xx") 不起作用

标签: ios objective-c macos nslog


【解决方案1】:

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

所以代替:

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

用途:

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

补充:

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

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

【讨论】:

  • 感谢您的回答。这导致了我的另一个问题。请阅读我的编辑。
  • 为什么不将LOG_X定义为:#define LOG_X(val) NSLog(@"xxyy%@zz", val)?我不明白需要所有单独的文字。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多