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

Rak*_*esh 2 cocoa objective-c nsarray objective-c-literals

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

@[obj1,obj2]
Run Code Online (Sandbox Code Playgroud)

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

NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[greaterThanPredicate, lessThanPredicate]];
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 11

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

这个

@[greaterThanPredicate, lessThanPredicate]
Run Code Online (Sandbox Code Playgroud)

在逻辑上等同于*:

[NSArray arrayWithObjects:greaterThanPredicate, lessThanPredicate, nil]
Run Code Online (Sandbox Code Playgroud)

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

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


*在引擎盖下,新语法的数组初始化程序转换为调用arrayWithObjects:count:.感谢newacct的纠正.

  • clang版本号有点令人困惑:Apple的版本方案与开源版本不同.引入该功能的正确版本号是:Apple 4.0,clang 3.1 (3认同)
  • "等同于:"不完全.它相当于对`arrayWithObjects:count:`的调用. (2认同)