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

9 objective-c llvm literals ios llvm-4.0

新的Xcode 4.4已经出来了它应该支持像这样的文字

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

它也应该支持@YES@NO,针对最新的iOS时不工作5(和之前).编译后显示错误消息:

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

我知道你可以通过输入@(YES)和修复它@(NO).但我想知道为什么它没有按预期工作的原因.

Fel*_*lix 24

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

#define YES             (BOOL)1
Run Code Online (Sandbox Code Playgroud)

这将在iOS 6 SDK中修复:

#define YES             ((BOOL)1)
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*ter 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
Run Code Online (Sandbox Code Playgroud)

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

这值得在评论中添加:

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