为什么我不应该使用 [NSDictionary objectForKey:]?

Why should I not be using [NSDictionary objectForKey:]?

我最近开始使用失礼 (http://fauxpasapp.com/),在我的项目中我多次收到以下警告:

旧的、冗长的Objective-C语法

-[NSDictionary objectForKey:] is called. Consider using an Objective-C subscript expression instead.

我不确定下标表达式是什么,我也没有找到任何关于它的运气。我很好奇这里是否有人可以提供帮助。

谢谢!

没有性能差异,只是文字语法更清晰、更简洁,并且已经使用了好几年。

如果当前代码如下:

id var = [dictionary objectForKey:@"key"];

替换为:

id var = dictionary[@"key"];

您想了解 Objective-C 2.0。最好的办法就是直接上源码:

http://clang.llvm.org/docs/ObjectiveCLiterals.html

如您所见,引入了许多语言特性:NSNumber 文字和 "boxing" 表达式,以及 NSArray 和 NSDictionary 的下标(以及您自己的 类,如果您愿意)。这被认为是 "modern" 方式。

Xcode 会为您将您的代码重构为 "modern Objective-C"(请参阅“编辑”>“重构”下的内容),这样您就可以在不做任何工作的情况下使您的代码现代化!

通常你会写这样的东西:

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:42] forKey:@"foo"];
id value = [dictionary objectForKey:@"foo"];

现在你会这样写:

NSDictionary *dictionary = @{@"foo": @42};
id value = dictionary[@"foo"];

我想你会同意它更简单、更好看。

可以在 NSHipster

找到一些关于对象订阅的有用信息