【问题标题】:How can I find out the Objective-C generics type?如何找出 Objective-C 泛型类型?
【发布时间】:2015-06-16 11:24:28
【问题描述】:

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

我想使用此功能重写我的 JSON 反序列化器类(它需要这种类型的提示 - 以前我通过向具有同构数组作为属性的类添加 -(Class)jsonHintForKey:(NSString*)key 解决了这个问题。)

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

【问题讨论】:

    标签: ios objective-c xcode generics


    【解决方案1】:

    Xcode 7 中引入的轻量级泛型只是编译时提示,以帮助编译器发出警告,但在运行时您会得到相同的旧行为,变量只是 NSArrays 或 ids。

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

    见the transcript of the talk:

    所以整个轻量级泛型特性都是基于type erasure model。这意味着编译器拥有所有这些丰富的静态类型信息,但它会在生成代码时删除这些信息。

    【讨论】:

    • 在那个来源上做得很好:)
    【解决方案2】:

    这是不可能的。

    objective-c 中引入了泛型,以改善 swift 和 Objective-c 之间的桥梁。它赋予 Objective-c 的优势仅在编译时有用,而我在运行时会丢失这些信息。

    【讨论】:

    • 请注意,当objective-c 类被导入swift 时,泛型不会被移植,所以我不认为桥接是它们被添加到objective-c 的原因。
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多