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
}