使用泛型

时间:2016-08-13 07:36:47

标签: swift generics protocols

我的问题是你有Array个符合protocol的对象。我想迭代数组调用数组中每个成员的方法。但是,我想调用的方法是静态的并使用泛型。我需要获取数组中元素的类来执行此操作。你怎么得到那个对象的类?有可能吗?

我正在Swift中编写泛型函数库。

我有一个名为DBAble的协议,其功能如下:

static func get<T: DBable >(id:Int) -> T?

我有一个符合DBAble的对象数组:

let objs:[DBAble] = []

我想迭代数组并调用:

for obj in objs {
    obj.get(id: anInt)
}

然而我收到了这条消息:

  

静态成员'get'不能用于'DBable.Protocol'类型的实例

有没有办法找到符合协议的对象的类(或结构类型)?我明白我能做到:

if obj is User {

}

然而,这不是我正在寻找的解决方案。

1 个答案:

答案 0 :(得分:0)

应用程序的问题接近于波纹管方法中的类型T

 static func get<T: DBable >(id:Int) -> T?
必须在编译时知道

,而dynamicType将在运行时为您提供类型。

对于考虑此问题的任何其他人,答案是否定的,在运行时找不到在泛型函数中使用的类型。正如@hamish的评论中所解释的

  "element.dynamicType is the actual type of a given element in your array. Your get(_:) method has a generic parameter T that must be known at compile time"