我有一个在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<MyOtherObject>)
并获取"Cannot specialize non-generic type 'NSArray'"
当我尝试MyObject.clearAll(MyOtherObject.values()as!Array)

我得到"Array<MyOtherObject> is not convertible to [Any]"
我怎样才能解决这个问题?

最佳答案

在这种情况下,编译器错误将毫无帮助。除了正确的地方,它们几乎指向所有地方。问题是由于MyObject上的泛型参数引起的:在Swift中,未专门化的泛型类型本身并不适用,并且不能在其上调用方法。它必须专门化才能具体化。

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

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

(如果它也是通用的,您也需要对MyOtherObject做同样的事情。)

10-02 01:45