从泛型类型的Swift实例化
问题描述:
我有一个类实现Mappable协议,我想将类型作为参数传递给函数并获取该对象的实例,但该类型也可能是原始类型。从泛型类型的Swift实例化
class MyMappable : Mappable {
required init?(map: Map) {
print("i am custom mappable")
}
}
func getInstance<T>() -> T{
if T.self == Int.self {
return 10 as T
}
if T.self is Mappable.self {
return T(Json : [:]) //this is the problem, T is not Mappable
}
}
我想的是创建这样的2占优的getInstance:
func getInstance<T>() -> T{}
func getInstance<T : Mappable>() -> T{}
但更多类型的它可以大量替代的。 有没有办法让swift知道T在第一个函数中是可映射的?
答
可以有条件地将它转换为可映射像这样(未经):
if let MappableType = T.self as? Mappable.self {
return MappableType(Json : [:])
}
通常变量名是小写的,但在这种情况下,我能想象用大写,因为它被用作一个类型。
根据您的使用情况/调用网站,您也可以采取不同的方式。
如何制约getInstance<T>() -> T
方法:
getInstance<T: Mappable>() -> T