5

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

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

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

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

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

这篇文章:http ://clang.llvm.org/docs/ObjectiveCLiterals.html建议@YES应该可行。

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

漏洞?!

4

2 回答 2

3

这不是一个错误,这是因为苹果目前有

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

代替

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

这是在最新的 SDK 中修复的。

于 2012-09-03T15:00:18.353 回答
1

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

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

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

于 2012-09-03T14:56:25.370 回答