9

新的 Xcode 4.4 已经发布,它应该支持像这样的文字

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

并且它还应该支持@YESand @NO,这在针对最新的 iOS 5(及更早版本)时不起作用。编译后显示错误信息:

意外的类型名称“BOOL”:预期的表达式

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

4

2 回答 2

24

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

#define YES             (BOOL)1

这将在 iOS 6 SDK 中修复:

#define YES             ((BOOL)1)

与此同时,您必须输入@(YES).

于 2012-07-27T10:33:30.443 回答
9

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

对此答案的评论者还指出:

我想警告一件小事。因此也不支持文字布尔值。但是,我实施的一个快速修复是将其添加到我的一个常见标题的开头(在 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

于 2012-07-27T10:30:34.380 回答