目标c-使用[key]表示法访问NSDictionary中的密钥



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

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

有人能告诉我这是不是一直瞒着我,或者这是语言最近的变化吗?

EDIT:这个问题一般不是指新的字符串文字,而是指使用与NSArray相同的字符串文字语法访问NSDictionary。我显然忽略了这一点,只是想检查一下什么时候添加了这个特定的语法。

这是Xcode 4.4+的新添加,依赖于Apple的LLVM+Crang编译器。这是一个新功能:)也可以使用相同的符号访问数组: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的方法!

参考iOS 6中引入的"现代Objective-C"。

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

所以,不,这个功能并不是什么新鲜事,你忽略了它…;-)

最新更新