我有一个在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
做同样的事情。)