如何在类Template方法上调用静态方法?

时间:2017-05-18 02:23:30

标签: swift swift3

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

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

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

,其中

let carObject = parse(json:json, context:context) as? Car

任何帮助?

2 个答案:

答案 0 :(得分:0)

在函数调用之后完成转换,因此泛型约束解析为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")

答案 1 :(得分:0)

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

添加

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

如果我拨打以下电话,那就可以了。

if let obj = myFunc(Car.self, ...) {
   // obj will be of type Car
}

实现这一点似乎真的太多了,但可能存在潜在的原因。