【问题标题】:Variable of subclass inheriting superclass with generic type子类的变量继承超类的泛型类型
【发布时间】:2017-10-23 07:52:20
【问题描述】:

我有一个类Superclass,泛型类型为UIViewSubclass 类继承自 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>?'

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

谢谢!

【问题讨论】:

  • this
  • @OrkhanAlikhanov 我无法让它工作......
  • 尽管UIButtonUIView 的子类型,Superclass&lt;UIButton&gt;不是Superclass&lt;UIView&gt; 的子类型。

标签: ios swift generics inheritance


【解决方案1】:

如果你想创建Superclass的对象,你可以像这样启动它,

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

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

同样,子类的类型是 Superclass&lt;UIButton&gt; 而不是 Superclass&lt;UIView&gt;

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

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

【讨论】:

  • 是的,我已经开始工作了,但问题是我有一个 switch case,根据值,我想用不同类型的 UIView 初始化 Subclass 类。我怎样才能做到这一点?
猜你喜欢
  • 2020-03-02
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2015-09-15
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多