Literal@YES在iOS 5/Xcode 4.4中不起作用



新的Xcode 4.4已经发布,它应该支持之类的文字

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

它还应该支持@YES@NO,这在针对最新的iOS 5(及以前版本)时不起作用。编译后显示错误消息:

意外的类型名称"BOOL":应为表达式

我知道你可以通过键入@(YES)@(NO)来修复它。但我想知道它没有按预期工作的原因。

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

#define YES             (BOOL)1

这将在iOS 6 SDK中修复:

#define YES             ((BOOL)1)

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

这对于有关文字的信息很有用。

对此答案的一位评论者也指出:

有一件小事我想提醒一下。也不支持文本布尔正因为如此。然而,我实现的一个快速解决方案是添加这是我的一个常见标题(在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的答案似乎更切中要害。你应该接受这一点。

这是值得添加的评论:

需要注意的是,这需要在#导入之后完成。如果将这些#定义放在它们的Prefix.pch中,它们应该确保在pch 中更早地导入Foundation

最新更新