为什么我不应该使用 [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
找到一些关于对象订阅的有用信息
我最近开始使用失礼 (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
找到一些关于对象订阅的有用信息