Swift 如何在类模板方法上调用静态方法?

Swift 如何在类模板方法上调用静态方法?,swift,swift3,Swift,Swift3,我尝试在泛型T:BaseModel上调用一个类方法,其中T可以是BaseModel的子类。 例如汽车。 在T应该是Car的情况下,我希望在Car类上调用我的class方法 但是,它最终总是调用BaseModel类方法 class func parse<T: BaseModel>(json: JSON, context: NSManagedObjectContext) throws -> T? { return T.classParseMethod(json: json)

我尝试在泛型
T:BaseModel
上调用一个类方法,其中T可以是BaseModel的子类。 例如
汽车
。 在T应该是
Car
的情况下,我希望在
Car
类上调用我的class方法

但是,它最终总是调用BaseModel类方法

class func parse<T: BaseModel>(json: JSON, context: NSManagedObjectContext) throws -> T? {
   return T.classParseMethod(json: json) //This never calls the Car.classParseMethod()
}

有什么帮助吗?

转换在函数调用之后完成,因此通用约束解析为T=BaseModel。您希望函数知道类型,以便它能够正确解析泛型约束:

func parse<T: BaseModel>(_ str: String) -> T? {
    print(T.Type.self) // should print like: Car.Type
    return T.parse(str) as? T
}

// Make the desired type known to swift
let car: Car? = parse("My Car Format String")
func parse(str:String)->T?{
print(T.Type.self)//应该像这样打印:Car.Type
将T.parse(str)返回为?T
}
//使swift知道所需的类型
出租汽车:汽车解析(“我的汽车格式字符串”)

一个似乎有效的解决方案是:

func myFunc<T: BaseModel>(_ type: T.Type,..) -> T? {
  type.aClassFunc()
{

要做到这一点似乎太过分了,但可能有一个潜在的原因。

有人知道为什么在通用解析方法中仍然必须强制转换为T(
T.parse(str)as?T
),在我的代码中不起作用。也许是因为我在做的是类函数。
func myFunc<T: BaseModel>(_ type: T.Type,..) -> T? {
  type.aClassFunc()
{
if let obj = myFunc(Car.self, ...) {
   // obj will be of type Car
}