我有一个类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
?
谢谢!
答案 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
}