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