继承具有泛型类型的超类的子类的变量

时间:2017-10-23 07:52:21

标签: ios swift generics inheritance

我有一个类Superclass,其类型为UIView。课程Subclass继承自Superclass

class Superclass<T: UIView>: UIViewController { ... }

class Subclass: Superclass<UIButton> { ... }

现在,从另一个UIViewController我试图初始化类型为Subclass的对象:

let childViewController: Superclass<UIView>?
    switch type {
    case .typeOne:
      childViewController = Subclass()
    default:
      childViewController = nil
    }

但是引发了以下错误:

Cannot assign value of type 'Subclass' to type 'Superclass<UIView>?'

我如何指定我想用childViewController类型初始化UIButton

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想创建一个Superclass的对象,请启动它,如

    let parentViewController: Superclass<UIButton>? = Superclass<UIButton>()

即。在实例化对象时,您需要对Type使用相同的Generic,就像在定义变量时使用的那样。

同样,子类的类型为Superclass<UIButton>,而不是Superclass<UIView>

因此,您需要使用childViewController接受的Generic类型定义Subclass,即

    let childViewController: Superclass<UIButton>?
    switch type {
    case .typeOne:
        childViewController = Subclass()
    default:
        childViewController = nil
    }