为什么@YES给出“预期表达式”错误,但@(YES)编译?

时间:2012-07-28 00:24:46

标签: objective-c compiler-errors objective-c-literals

使用XCode 4.4转换为现代目标C语法,我的[NSNumber numberWithBool:YES]次调用已转换为@(YES)。我有一些我现在已经忘记的问题,并将自己更改为@YES,这应该是正确的语法。

然而,这样做会给我一个错误:

  

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

我知道有一种“表达式”语法,但我不明白为什么我不能简单地使用@YES@NO

// Compiler error:
NSDictionary *userDefaultsDefaults = @{@"hasBeenLaunched": @YES};

// No error
NSDictionary *userDefaultsDefaults = @{@"hasBeenLaunched": @(YES)};

为什么@(YES)编译而@YES没有,我可以采取哪些措施来解决这个问题?

1 个答案:

答案 0 :(得分:10)

简短回答:

使用@(YES)@(NO)


更长的答案:

看看this answer,它解释说这主要是对Apple的疏忽。

this answer上的评论者也指出:

  

我想提醒一件小事。文字bool也不受支持   因为这。但是,我实施的快速修复是添加   这是我的一个常见标题的开头(在iOS项目中)

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif