我怀疑我可能会犯同样的错误在本post here在罗布描述我应该做这件事的另一种方式,但考虑到这一点:阵列仿制药与元类型(使用AlamofireObjectMapper)
我试图以通用的方式使用AlamofireObjectMapper。它有一个协议
public protocol Mappable
我则有采用它的各种模型类
class Dog: Mappable
class Cat: Mappable
class Bird: Mappable
我有这样的方法
func loadEntityArray<T: Mappable>(type: T.Type)
,这是通用的原因是因为它调用一个函数load()需要一个使用这个泛型参数的完成块。 'type'参数从来没有被实际使用过,但是如果没有泛型类型在func的参数列表中,你就不能创建一个通用类型。
func load(completion:(Response<T, NSError> -> Void))
loadEntityArray从另一个方法
func letsgo() { loadEntityArray(Dog.self); loadEntityArray(Cat.self) }
到目前为止好,这一切工作调用。但我想传递一个数组,将模型加载到letsgo(),我无法解决如何执行此操作。如果我改变letsgo()来
func letsgo<T:Mappable>(models: [T.Type]) {
for mod in models {
loadEntityArray(mod)
}
}
,然后用1 PARAM像
letsgo([Dog.self])
它的工作原理调用letsgo(),但只要我有2个或更多的数组,我得到一个编译器错误“无法将类型NSArray的值转换为期望的参数类型[_.Type]'我现在不会如何明确地键入此数组。
letsgo([Dog.self, Cat.self])
我试过各种排列,似乎没有任何工作。我在这里做不可能的事情吗?在我看来,编译器在编译时有足够的信息来工作,所以我不确定这是否是一种语法,或者我在这里用泛型做错了。
'loadEntityArray()'的目的是什么?你为什么试图使用类的类型作为参数? – ColGraff
@KennethBruno问题已更新! – Brynjar