我怎样才能找到Objective-C泛型类型?

时间:2015-06-16 11:24:28

标签: ios objective-c xcode generics

Xcode 7包含一个Objective-C变体,您可以在其中定义(同源)NSArray返回值和属性的类型提示,定义为NSArray<UIImage*>

我想使用这个功能来重写我的JSON-deserializer类(需要这种类型的提示 - 之前我已经通过在我的类中添加-(Class)jsonHintForKey:(NSString*)key来解决这个问题,这些类具有同构数组作为属性。 )

您是否知道(如果是这样,如何)我可以使用Objective-C运行时在运行时获取此新类型提示的类?

2 个答案:

答案 0 :(得分:30)

Xcode 7中引入的轻量级泛型只是编译时提示,可以帮助编译器发出警告,但在运行时,您的变量只有NSArrayid s的变量。

来源:WWDC '15 "Swift and Objective-C Interoperability" session

请参阅the transcript of the talk

  

因此整个轻量级泛型功能基于type erasure model。这意味着编译器具有所有这些丰富的静态类型信息,但在生成代码时会删除该信息。

答案 1 :(得分:7)

不可能这样做。

在objective-c中引入了泛型,以改善swift和objective-c之间的桥梁。它给objective-c带来的好处只是在编译时很有用,而且我在运行时丢失了信息。