从泛型类型的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