Objective-C中的Bracket语法

Bracket syntax in Objective-C

本问题已经有最佳答案,请猛点这里访问。

我喜欢时不时地乱编代码,作为一种爱好,我注意到一些苹果开发人员文档中有一种不熟悉的语法:

newSectionsArray[index]

我通常期望如下:

[object method]

有人能给我解释一下吗?

谢谢!


它被称为对象下标,如这里所解释的。

它的句法糖

1
newSectionsArray[index]

由编译器转换为

1
[newSectionsArray objectAtIndexedSubscript:index];

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

1
dictionary[@"key"]

酷(并且潜在的危险)特性是它是通用的,所以您甚至可以在自己的类中使用它。

你只需要实现几个方法

(用于索引访问)

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

或(用于键控访问)

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

当您在自定义类的实例上使用括号表示法时,将调用它们。

这样你就可以编写一个基于网格的游戏,并通过

1
board[@"B42"]; // => [board objectForKeyedSubscript:@"B42"]

或是把木板上的一块

1
board[@"C42"] = @"Troll"; => [board setObject:@"Troll" forKeyedSubscript:@"C42"];

很好,但我不会滥用它。


这是Clang3.4中介绍的文字语法。但是,您可以使用旧语法[newSectionsArray objectAtIndex:index]。是一样的。


newSectionsArray可能是一个数组(即由同一类型的多个对象组成的连续块),index可能是一个整数。newSectionsArray[index]给出了位于index位置的对象(从0开始计数)。