24

可能重复:
Objective-C 中是否有一些文字字典或数组语法?

我最近注意到一些奇怪的东西似乎在 Objective-c 中起作用。

当我有一个数组时,

NSArray *myArray = @[@"1", @"b", @"3", @"d"];

我通常可以通过以下方式访问第二个元素,

NSString *element = [myArray objectAtIndex:1]; // second element 

但是我现在似乎也可以通过它访问它。

NSString *element = myArray[1];

有谁知道这现在是否是一种定义的行为,因此可以安全使用,还是应该避免它?感谢任何能提供帮助的人!!

4

4 回答 4

29

此语法是在 Clang 3.3 中添加的:Objective C Literals。本质上,编译器将类型objCObj[idx]的表达式转换为表达式[objCObj objectAtIndexedSubscript:idx]。它也适用于字典,您可以自由地将它用于您自己的对象。

因此,假设您将使用现代版本的 Objective C 和适当更新的 Objective C 编译器(即 Clang),那么您使用它是完全安全的。

于 2013-02-05T13:48:36.290 回答
4

这是objective-c 的一个新特性,自xCode 4.5 起可用

使用这种语法是安全的,你甚至可以为你自己的类提供支持。

于 2013-02-05T13:48:57.070 回答
2

是的,使用这些语法是安全的。

这些语法是现代 Objective-C 的一部分。

您可以查看这篇文章以获取更多选项:ObjectiveCLiterals

于 2013-02-05T13:51:08.637 回答
2

对于最新版本的 LLVM 编译器来说,这是一个完全有效的代码。到目前为止,它对其他编译器(例如 GCC)无效。

无论您是否应该避免它 - 嗯,这是一个品味问题。由于索引的行为略有不同(使用完全不同的方法来实现它),因此互联网上有几个关于它的大讨论。也有关于是否使用表达式文字的讨论,因为有时它们会降低代码的可读性(例如,它们写得像文字,但它们实际上是自动释放的对象)。请注意,一切都是使用文字完成的,可以使用简单的宏来完成。

于 2013-02-05T13:53:25.577 回答