stringWithFormat应该返回一个字符串,为什么这个语句不能编译
NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);
何时
NSAssert(YES, @"test if compiles");
编译?
答案 0 :(得分:15)
将此用作:
NSAssert(YES, ([NSString stringWithFormat:@"%@",@"test if compiles"])); // Pass it in brackets ()
希望它对你有所帮助。
答案 1 :(得分:11)
您根本不需要使用stringWithFormat
。 NSAssert
已经希望传递格式字符串和变量参数以进行格式化。举个例子,你会发现它的效果也很好:
NSAssert(YES, "%@", @"test if compiles");
或者,一个更现实的例子:
NSAssert(i > 0, @"i was negative: %d", i);
您遇到问题的原因是NSAssert
is a macro,定义如下:
#define NSAssert(condition, desc, ...)
编译器很困惑,因为stringWithFormat
的参数列表与宏本身的参数列表之间存在歧义。正如Nishant指出的那样,如果您真的想在这里使用stringWithFormat
,可以添加括号以避免混淆。