【问题标题】:Objective-C: NSArray of Custom Class?Objective-C:自定义类的 NSArray?
【发布时间】:2014-09-02 15:42:47
【问题描述】:

我正在努力学习 iOS,我来自 Java 背景,我们可以拥有特定类的列表/数组,例如

List<String> l = new ArrayList<>();
List<MyClass> l = new ArrayList<>();

查看Objective-C,我可以使用NSArray 类来制作immutable 数组,但是我如何指定这个NSArrray 严格 属于MyClass 类型?

【问题讨论】:

  • 你只把 MyClass 对象放进去。
  • 我明白了,我很好奇这里是否有类似于 Generics 的内容
  • 如果你必须,你可以看看 Swift。

标签: ios objective-c iphone


【解决方案1】:

现在 Xcode 7 支持标准集合的某种泛型(例如 NSArrays)。所以你可以创建一个数组并提供这样的存储对象:

NSArray<NSString*> *myArrayOfStrings;

【讨论】:

    【解决方案2】:

    据我所知,在 Objective-C 中没有用于指定放入 NSArrays 的对象类型的内置机制,但如果这有帮助的话,看起来 Swift 可以满足您的需求:

    https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-XID_172

    在一个稍微相关的说明中,这里有一篇不错的文章,关于强制将仅某种类型的对象插入子类 NSMutableArray 并在尝试插入 错误 对象类型时抛出异常:

    NSMutableArray - force the array to hold specific object type only

    【讨论】:

      【解决方案3】:

      遗憾的是,Objective-C 中没有泛型。

      【讨论】:

      • 为什么?我讨厌 Objective-C 的无类型特性。不过 Swift 似乎已经介绍了它们。
      • 我讨厌泛型。与调试在错误集合中包含错误对象的非常罕见的事件相比,您花费更多的时间试图解决它们的限制。
      • @HotLicks 只需使用&lt;Any&gt;,问题就解决了。
      • 对于这样一个基本的用例,使用泛型只有优点,绝对没有缺点。
      • ..对于像 Objective-C 这样的动态类型语言来说,“在错误集合中有错误对象的事件”并不罕见。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多