如何将必需属性添加到必须实现所需初始化程序的子类?

时间:2014-12-14 01:57:06

标签: oop swift generics swift-extensions

这是场景。我有三个课程:ABC。类AB的子类。类C需要将其实例变量之一传递给类A(让我们称之为b)。我希望确保在C初始化A时发生这种情况,以确保我不会遇到b为零的任何情况。以下是AB的结构:

class B {
  var a: Type1

  required init(a: Type) {
    ...
  }
}

class A : B {
  var b: Type2
  ...
}

Swift规则规定必须在初始化时定义一个非可选或隐式展开的变量。但是,由于我必须实现B的初始化(我无法控制B;由Apple给出)我无法保证,因为我无法在A的初始化程序中添加额外的参数。

我想确保使用A(b)A(a,b)调用A,而不是A(a),以确保初始化b。我试图寻找解决方案或考虑使用协议或扩展的解决方案,但我无法弄清楚。我得到答案的结果是通过this回答,但它并没有真正做到我想要的。

所以我有两个问题(一个使另一个无效): 1. [显而易见的]有解决方案吗? (我错过了一些非常明显的东西吗?) 我接近这个错吗?我应该使用不同的模式吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,这应该有效:

class B {
    var a: Type1

    init(a: Type1) {
        self.a = a
    }
}

class A : B {
    var b: Type2

    init(a: Type1, b: Type2) {
        self.b = b
        super.init(a: a)
    }
}