我尝试在泛型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
任何帮助?
答案 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
}
实现这一点似乎真的太多了,但可能存在潜在的原因。