为什么这个NSAssert与stringWithFormat不能编译?

时间:2013-08-23 11:01:04

标签: ios nsassert

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

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

何时

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

编译?

2 个答案:

答案 0 :(得分:15)

将此用作:

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

希望它对你有所帮助。

答案 1 :(得分:11)

您根本不需要使用stringWithFormatNSAssert 已经希望传递格式字符串和变量参数以进行格式化。举个例子,你会发现它的效果也很好:

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

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

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

您遇到问题的原因是NSAssert is a macro,定义如下:

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

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