2

当数组以以下格式表示时,我在网上的许多地方甚至在苹果文档中都看到过:

@[obj1,obj2]

例如;在谓词编程指南中有这样的语句:

NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[greaterThanPredicate, lessThanPredicate]];

但是当我在代码中编写相同的代码时,我得到一个“程序中的意外@”(如预期的那样)编译器错误。这只是表示数组的一种方式还是我错过了什么?

4

1 回答 1

11

这是一个相对较新的语法,它仅适用于包含 clang 3.3 或更新版本的 Xcode。

这个

@[greaterThanPredicate, lessThanPredicate]

在逻辑上等价于*

[NSArray arrayWithObjects:greaterThanPredicate, lessThanPredicate, nil]

您始终可以用旧语法替换新语法,而不会丢失功能。

编辑(回应Nikolai Ruhe的评论)Apple 的版本方案与开源版本不同。引入该功能的正确版本号是:Apple 4.0、clang 3.1。


*在底层,新语法的数组初始化器被转换为对arrayWithObjects:count:. 感谢newacct的更正。

于 2013-03-07T18:12:06.877 回答