Objective-C文字语法中的未装箱BOOL给出错误

时间:2012-09-03 11:53:37

标签: objective-c xcode4 objective-c-literals

我刚刚尝试了作为Xcode 4.4的一部分引入的新Objective-C文字语法。

字典,整数和数组都运行良好,但我一直遇到问题让BOOL工作。 e.g:

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

给了我 “意外的类型名称'BOOL':带有布尔值的行上的预期表达式”

但是,@(YES)@1@true一切正常。

这篇文章:http://clang.llvm.org/docs/ObjectiveCLiterals.html表明@YES应该有用。

我也尝试过它自己的行:NSNumber *myNum = @YES;并得到同样的错误。

错误?!

2 个答案:

答案 0 :(得分:3)

这不是一个错误,这是因为Apple目前正在做

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

而不是

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

已在最新的SDK中修复。

答案 1 :(得分:1)

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

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

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