在objective-c中表示数组的特殊方式

时间:2013-03-07 18:09:33

标签: objective-c cocoa nsarray objective-c-literals

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

@[obj1,obj2]

例如;在谓词编程指南中有一个这样的声明:

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

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

1 个答案:

答案 0 :(得分:11)

这是relatively new syntax,仅适用于包含clang 3.3或更新版本的Xcode。

@[greaterThanPredicate, lessThanPredicate]

在逻辑上等同于 *

[NSArray arrayWithObjects:greaterThanPredicate, lessThanPredicate, nil]

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

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


* 在新的语法的数组初始化程序的基础上,转换为arrayWithObjects:count:的调用。感谢newacct进行更正。