【问题标题】:Objective-C class method with generic parameter cannot be called in Swift不能在 Swift 中调用具有泛型参数的 Objective-C 类方法
【发布时间】:2016-10-18 13:10:01
【问题描述】:

我有一个在 Objective-C 中声明如下的方法

+(void) clearAll:(NSArray<ParameterType> *)values;

我有另一个类方法,在另一个对象中声明如下

+(NSArray *) values;

我正在尝试从 Swift 中调用它们,如下所示:

MyObject.clearAll(MyOtherObject.values())

当我尝试运行它时,它会显示一系列不同的编译时错误。

错误是:

"Generic parameter 'ObjectType' could not be inferred"

那我试试MyObject.clearAll(MyOtherObject.values() as NSArray&lt;MyOtherObject&gt;)

并获取"Cannot specialize non-generic type 'NSArray'"

当我尝试 MyObject.clearAll(MyOtherObject.values() as!Array)

我收到"Array&lt;MyOtherObject&gt; is not convertible to [Any]"

我该如何解决这个问题?

【问题讨论】:

    标签: objective-c generics compiler-errors swift3 class-method


    【解决方案1】:

    编译器错误在这种情况下非常无用;除了正确的地方之外,它们几乎指向任何地方。问题是因为MyObject 上的泛型参数:在 Swift 中,非特化泛型类型本身并不是一个东西,并且不能在其上调用方法。它必须专门化才能变得具体。

    解决方法很简单:只需添加类型参数即可:

    MyObject<MyOtherObject>.clearAll(MyOtherObject.values())
    

    (如果MyOtherObject 也是通用的,您也需要这样做。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多