具有泛型返回值的类函数

时间:2015-12-10 14:22:57

标签: swift

现在我有以下课程:

class A {
    class func instantiate() -> A {
        return MakeObject()
    }
}

class B: A {}

let x = B.instantiate()

这导致x为A类。如何更改instantiate以返回从中调用的子类的实例?换句话说,这样x最终成为B型。

编辑:

根据Martin R的回答,这就是我以前解决的问题:

class A {
    class func instantiate() -> Self {
        func helper<T>() -> T {
            return MakeObject() as! T
        }

        return helper()
    }
}

1 个答案:

答案 0 :(得分:4)

返回类型需要为Self(这是具体类型 调用类方法,并且必须使用a进行初始化 required init方法(可以在子类中重写):

class A {

    class func instantiate() -> Self {
        return self.init()
    }

    required init() {

    }
}

class B: A {}

let x = B.instantiate() // `x` has type `B`

或者,只需定义一个init方法

init(parameters ...) {

}

“自动”返回该类的实例 呼吁。