Literal @YES不适用于iOS 5 / Xcode 4.4

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

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

它也应该支持@YES@NO ,这在目标最新的iOS 5(和之前版本)时不起作用。 编译后显示错误信息:

意外的types名称'BOOL':预期的expression式

我知道你可以通过input@(YES)@(NO)来修复它。 但是我想知道它不能按预期工作的原因。

原因是苹果在这里忘了括号:

 #define YES (BOOL)1 

这将在iOS 6 SDK中修复:

 #define YES ((BOOL)1) 

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

这对于文字信息很有用。

这个答复的评论者也指出:

我想警告一件小事。 文字布尔也不支持,因为这一点。 但是,我实现的一个快速解决scheme是将其添加到我的一个常见标题的开头(在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之后完成。 如果将这些#define放在它们的Prefix.pch中,他们应该确保在pch中早些时候导入Foundation