新的 Xcode 4.4 已经发布,它应该支持像这样的文字
@42
@"String"
@23.0L
@{ @"key" : obj }
和
@[obj1, obj2]
并且它还应该支持@YES
and @NO
,这在针对最新的 iOS 5(及更早版本)时不起作用。编译后显示错误信息:
意外的类型名称“BOOL”:预期的表达式
我知道您可以通过键入@(YES)
和来修复它@(NO)
。但我想知道它没有按预期工作的原因。
新的 Xcode 4.4 已经发布,它应该支持像这样的文字
@42
@"String"
@23.0L
@{ @"key" : obj }
和
@[obj1, obj2]
并且它还应该支持@YES
and @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 的回答似乎更重要。你应该接受这一点。
这值得从评论中添加:
需要注意的是,这需要在 #import 之后完成。如果将这些#defines 放在他们的 Prefix.pch 中,他们应该确保在 pch 中更早地导入 Foundation