可能重复:
Is there some literal dictionary or array syntax in Objective-C?
我最近注意到一些奇怪的东西似乎在objective-c中起作用。
当我有一个数组时,
NSArray *myArray = @[@"1", @"b", @"3", @"d"];
我通常可以通过
访问第二个元素NSString *element = [myArray objectAtIndex:1]; // second element
但是我现在似乎也可以通过它访问它。
NSString *element = myArray[1];
有没有人知道这现在是一个定义的行为,因此可以安全使用,还是应该避免使用它?感谢任何可以帮助的人!!
答案 0 :(得分:29)
在Clang 3.3中添加了这种语法:Objective C Literals。实质上,编译器将类型objCObj[idx]
的表达式转换为表达式[objCObj objectAtIndexedSubscript:idx]
。它也适用于字典,您可以自由地将它用于自己的对象。
因此,假设您将使用现代版本的Objective C和适当更新的Objective C编译器(即Clang),那么您使用它是完全安全的。
答案 1 :(得分:4)
这是objective-c的一个新功能,自xCode 4.5起可用
使用这种语法是安全的,你甚至可以为此提供自己的类支持。
答案 2 :(得分:2)
答案 3 :(得分:2)
这是最新版LLVM编译器的完美有效代码。 到目前为止,它对其他编译器(例如GCC)无效。
你是否应该避免 - 嗯,这是一个品味问题。因为索引行为略有不同(使用完全不同的方法来实现它),因此在互联网上有几个关于它的大讨论。 还有讨论是否使用表达式文字,因为当它们使代码可读性较低时存在(例如,它们像文字一样写,但它们实际上是自动释放的对象)。请注意,使用文字完成所有操作都可以使用简单的宏完成。