6

我刚刚意识到我可以NSDictionary同时使用objectForKey:和 dict[key] 访问?

NSDictionary *coordsDict = @{@"xpos": @5.0, @"ypos": @7.2, @"zpos": @15.7};
NSLog(@"XPOS: %@", coordsDict[@"xpos"]);
NSLog(@"XPOS: %@", [coordsDict objectForKey:@"xpos"]);

谁能告诉我这是否一直对我隐藏,或者它是否最近对语言进行了一些更改?

编辑:这个问题一般不是指新的字符串文字,而是更具体地说是使用与 NSArray 相同的字符串文字语法访问 NSDictionary。我显然忽略了这一点,只是想检查一下何时添加了这个特定的语法。

4

2 回答 2

13

这是 Xcode 4.4+ 的新增功能,依赖于 Apple 的 LLVM+Clang 编译器。这是一个新功能 :) 数组也可以使用相同的符号来访问:myObjectArray[4].

如果您有兴趣将此新功能添加到您自己的类中(称为下标),您可以实现一些方法:

@interface NSArray(Subscripting)
- (id)objectAtIndexedSubscript:(NSUInteger)index;
@end

@interface NSMutableArray(Subscripting)
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index;
@end

@interface NSDictionary(Subscripting)
- (id)objectForKeyedSubscript:(id)key;
@end

@interface NSMutableDictionary(Subscripting)
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
@end

如果您在自己的类上实现这些方法中的任何一个,则可以在它们上下标。这也是您可以将此功能添加到 OS X 10.7 的方法!

于 2013-02-14T15:41:10.613 回答
0

请参阅 iOS 6 中引入的“现代 Objective-C”。

请参阅 WWDC 2012 视频:迁移到现代 Objective-C

所以,不,这个功能并不是真正的新功能,你忽略了它...... ;-)

于 2013-02-14T15:41:49.107 回答