Objective-C中的Bracket语法

时间:2013-09-30 06:41:37

标签: objective-c syntax

我喜欢把编码时不时地作为一种爱好,我注意到一些Apple Developer文档中有一种不熟悉的语法:

newSectionsArray[index]

我通常期待类似的事情:

[object method]

任何人都可以向我解释这个吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

它被称为对象下标,如here

所述

它的语法糖,如

newSectionsArray[index]

由编译器翻译为

[newSectionsArray objectAtIndexedSubscript:index];

NSDictionary也实现了下标,因此您可以这种方式访问​​元素:

dictionary[@"key"]

酷(并且有潜在危险)的功能是这是一般化的,所以你甚至可以在自己的课程中使用它。

您只需要实现几种方法

(用于索引访问)

- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;

或(用于键控访问)

- (id)objectForKeyedSubscript:(id)key;
- (void)setObject:(id)obj forKeyedSubscript:(id)idx;

并且只要在自定义类的实例上使用括号表示法,就会调用它们。

因此,您最终可以编写基于网格的游戏并通过

访问网格上的元素
board[@"B42"]; // => [board objectForKeyedSubscript:@"B42"]

或通过

在棋盘上移动一块
board[@"C42"] = @"Troll"; => [board setObject:@"Troll" forKeyedSubscript:@"C42"];

很好,但我不会滥用它。

答案 1 :(得分:1)

这是literal syntax,在Clang 3.4中引入。但是,您可以使用旧语法[newSectionsArray objectAtIndex:index]。这是一回事。

答案 2 :(得分:0)

newSectionsArray可能是一个数组(i.s.是一个相同类型的多个对象的连续块),index是一个整数。 newSectionsArray[index]为您提供位置index的对象(从0开始计数)。