Objective-C文本语法中未装箱的BOOL出现错误



我只是在试验作为Xcode 4.4的一部分引入的新的Objective-C文本语法。

字典、整数和数组都可以正常工作,但我在使BOOL工作时遇到了问题。例如:

NSDictionary *myDict = @{
    @"foo": @"bar",
    @"test": @YES
};

给了我"意外的类型名称'BOOL':预期的表达式"

然而,@(YES)@1@true都工作良好。

本文:http://clang.llvm.org/docs/ObjectiveCLiterals.html提示CCD_ 5应起作用。

我也在它自己的行NSNumber *myNum = @YES;上尝试过,但得到了相同的错误。

虫子?!

这不是一个错误,这是因为苹果目前正在进行

#define YES (BOOL)1
#define NO  (BOOL)0

而不是

#define YES ((BOOL)1)
#define NO  ((BOOL)0)

这在最新的SDK中是固定的。

BOOL文字依赖于定义为iOS或Mac SDK一部分的新语言关键字,因此较旧的SDK(包括iOS 5.1)没有它,因此必须使用装箱符号,即@(YES)

正如我在上面的评论中提到的,我的猜测是,对象订阅也是如此。

(使用以下来源回答我自己的问题:http://jamesdempsey.net/2012/07/30/moving-to-new-objective-c-literals/)

相关内容