【问题标题】:Monomorphic arrays with static type checking具有静态类型检查的单态数组
【发布时间】:2013-04-20 00:35:45
【问题描述】:
id<UIView> views = @[one, two, three];  
NSInteger object = [views lastObject]; // Compiler will warn me that `views` stores only UIViews

我需要多远才能实现这一点?有人有扩展 clang 以支持类似功能的经验吗?

Similar: nsmutablearray-force-the-array-to-hold-specific-object-type-only

【问题讨论】:

  • 等等。你愿意扩展编译器……你自己吗?
  • 更好的解决方案是欺骗为此打开的众多雷达之一,以提高其被正式添加到语言中的机会(openradar.appspot.com/radar?id=2731402 就是一个例子)。以这种方式修改 ObjC 真的不是我建议单独做的事情。
  • 你不能。我见过的最接近的是Typed Collections with Self Types in Objective-C
  • PS NSInteger 不是一个对象,它是一些原始类型的 typedef :)

标签: objective-c


【解决方案1】:

我也考虑过这一点,但最后我问它是否真的会让我更有效率。在我看来,Objective-C 是一种非常实用的语言,它的特性在现实世界中很有用,块之类的东西非常有用,但在我的经验中,命名空间和类型化数组之类的特性并没有那么多。我在我的代码中添加了很多 NSAssert 来检查类似的东西。通常我的可变集合包含在其他类中,因此我可以对可以添加到其中的内容进行大量控制,但也许这是我采用的一种模式,因为我没有类型化集合?

【讨论】:

    【解决方案2】:

    嗯,从技术上讲,你已经可以...

    UIView *views[] = {one, two, three};  
    NSInteger object = views[2]; 
    

    或者,更有用的是,您可以使用 Objective-C++。

    【讨论】:

      猜你喜欢
      • 2011-08-26
      • 1970-01-01
      • 2010-11-23
      • 2018-06-30
      • 2020-10-30
      • 2016-04-03
      • 2021-04-07
      • 2021-02-28
      • 2014-02-18
      相关资源
      最近更新 更多