【问题标题】:Why should I not be using [NSDictionary objectForKey:]?为什么我不应该使用 [NSDictionary objectForKey:]?
【发布时间】:2015-05-07 13:50:17
【问题描述】:

我最近开始使用 Faux Pas (http://fauxpasapp.com/),对于我的项目,我多次收到以下警告:

旧的、冗长的 Objective-C 语法

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

我不确定下标表达式是什么,而且我没有太多运气在上面找到任何东西。我很好奇这里是否有人可以提供帮助。

谢谢!

【问题讨论】:

  • 像这样:myDictionary[@"myKey"]
  • 它可能是指使用文字吗? mikeash.com/pyblog/…
  • 您只需在下标中给出key,例如dict[key]。即下标表达式。
  • 旧语法实际上并没有错。重要的是坚持其中一种格式。更短的符号与更具可读性无关。

标签: objective-c nsdictionary


【解决方案1】:

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

如果当前代码是这样的:

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

替换为:

id var = dictionary[@"key"];

【讨论】:

    【解决方案2】:

    通常你会这样写:

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

    现在你可以这样写:

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

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

    可以在 NSHipster 找到一些关于对象下标的好信息

    【讨论】:

      【解决方案3】:

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

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

      如您所见,引入了许多语言特性:NSNumber 字面量和“装箱”表达式,以及 NSArray 和 NSDictionary 的下标(以及您自己的类,如果您愿意)。这被认为是“现代”方式。

      Xcode 会为您将您的代码重构为“现代 Objective-C”(请参阅​​编辑 > 重构),因此您无需做任何工作就可以现代化您的代码!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-03
        • 2010-12-22
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 2016-05-23
        相关资源
        最近更新 更多