【问题标题】:Accessing keys in NSDictionary using [key] notation?使用 [key] 表示法访问 NSDictionary 中的键?
【发布时间】:2013-02-14 15:38:28
【问题描述】:

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

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

谁能告诉我这是一直瞒着我,还是最近对语言进行了一些更改?

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

【问题讨论】:

标签: objective-c nsdictionary objective-c-literals


【解决方案1】:

这是 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 的方法!

【讨论】:

  • @fuzzygoat 尽情享受吧:我在NSSegmentedControl 上添加了一个类别,以便以编程方式更轻松地添加分段。像这样的小事让我的一天更有趣! :)
【解决方案2】:

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

观看 WWDC 2012 视频:Migrating to Modern Objective-C

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

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2015-01-16
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多