我的问题是你有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 {
}
然而,这不是我正在寻找的解决方案。
答案 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"