5

使用 XCode 4.4 的 Convert to Modern Objective C Syntax,我的[NSNumber numberWithBool:YES]调用被转换为@(YES). 我有一些我现在忘记的问题,并自己将它们更改为@YES,这应该是正确的语法。

但是,这样做会给我错误:

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

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

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

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

为什么@(YES)编译时不编译@YES,我能做些什么来解决这个问题?

4

2 回答 2

10

简短的回答:

使用@(YES)@(NO)


更长的答案:

看看这个答案,它解释了这似乎主要是苹果公司的疏忽。

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

我想警告一件小事。因此也不支持文字布尔值。但是,我实施的一个快速修复是将其添加到我的一个常见标题的开头(在 iOS 项目中)

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif
于 2012-07-28T00:30:30.073 回答
0

Clang 更新中的新数字文字(如@YES)直到 4.5 才完全实现到 XCode 中。

于 2012-09-20T20:19:21.910 回答