8

stringWithFormat 应该返回一个字符串,为什么这个语句不编译

NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);

什么时候

NSAssert(YES, @"test if compiles");

编译?

4

2 回答 2

17

将此用作:

NSAssert(YES, ([NSString stringWithFormat:@"%@",@"test if compiles"])); // Pass it in brackets ()

希望它可以帮助你。

于 2013-08-23T11:09:43.837 回答
15

您实际上根本不需要使用stringWithFormatNSAssert 已经期望您传递格式字符串和可变参数进行格式化。鉴于您的示例,您会发现这同样有效:

NSAssert(YES, "%@", @"test if compiles");

或者,一个更现实的例子:

NSAssert(i > 0, @"i was negative: %d", i); 

你的问题的原因是因为NSAssert是一个宏,定义如下:

#define NSAssert(condition, desc, ...)

编译器很困惑,因为参数列表stringWithFormat和宏本身的参数列表之间存在歧义。正如 Nishant 指出的那样,如果您真的想在stringWithFormat这里使用,可以添加括号以避免混淆。

于 2014-03-19T18:18:19.380 回答