-1

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

newSectionsArray[index]

我通常期望类似:

[object method]

谁能给我解释一下?

谢谢!

4

3 回答 3

3

它被称为对象下标,如此处所述

它的语法糖,如

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"];

很好,但我不会滥用它。

于 2013-09-30T06:43:58.580 回答
1

这是Clang 3.4 中引入的字面语法。但是,您可以使用旧语法[newSectionsArray objectAtIndex:index]。这是同一件事。

于 2013-09-30T06:43:58.650 回答
0

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

于 2013-09-30T06:44:18.503 回答