【问题标题】:Bracket syntax in Objective-C [duplicate]Objective-C中的括号语法[重复]
【发布时间】:2013-10-05 22:37:47
【问题描述】:

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

newSectionsArray[index]

我通常期望类似:

[object method]

谁能给我解释一下?

谢谢!

【问题讨论】:

  • [yourArray objectAtIndex:index] 的语法糖

标签: objective-c syntax


【解决方案1】:

这称为对象下标,如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"];

很好,但我不会滥用它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Objective-C 2.0 已经过时了,并附带了 10.5。但无论如何,这有点奇怪的版本约定,在内部我们处于 4-532.2 版本,离 2.0 还很远(但我猜进化的变化卖得不好)
    • @JustSid 抱歉,我应该先检查一下。
    【解决方案3】:

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

    【讨论】:

    • newSectionsArray 在这种情况下是 NSArrayNSMutableArray 并且可以存储任何对象类型 (id)(它们确实必须相同类型);)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2013-02-16
    • 2021-11-20
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多