Bracket syntax in Objective-C
本问题已经有最佳答案,请猛点这里访问。
我喜欢时不时地乱编代码,作为一种爱好,我注意到一些苹果开发人员文档中有一种不熟悉的语法:
我通常期望如下:
有人能给我解释一下吗?
谢谢!
它被称为对象下标,如这里所解释的。
它的句法糖
1 | newSectionsArray[index] |
由编译器转换为
1 | [newSectionsArray objectAtIndexedSubscript:index]; |
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中介绍的文字语法。但是,您可以使用旧语法