Literal @YES无法在iOS 5 / Xcode 4.4中运行

时间:2012-07-27 10:28:33

标签: ios objective-c llvm literals llvm-4.0

新的Xcode 4.4已经出局,它应该支持像

这样的文字

@42
@"String"
@23.0L
@{ @"key" : obj }
@[obj1, obj2]

它还应该支持@YES@NO,这在定位最新的iOS 5(及之前版本)时无效。 编译后显示错误消息:

  

意外类型名称'BOOL':预期表达式

我知道您可以通过输入@(YES)@(NO)来解决问题。但是我想知道为什么它没有按预期工作的原因。

2 个答案:

答案 0 :(得分:24)

原因是Apple忘记了括号:

#define YES             (BOOL)1

这将在iOS 6 SDK中修复:

#define YES             ((BOOL)1)

在此期间,您必须输入@(YES)

答案 1 :(得分:9)

This对于有关文字的信息非常有用。

this answer上的评论者也指出:

  

我想提醒一件小事。文字bool也不受支持   因为这。但是,我实施的快速修复是添加   这是我的一个常见标题的开头(在iOS项目中)

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif

@ phix23s答案似乎更重要。你应该接受。

这值得在评论中添加:

  

应该注意,这需要在#import之后完成。如果将这些#defines放在他们的Prefix.pch中,他们应该确保先前在pch中导入Foundation