2

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

class B {
  var a: Type1

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

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

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

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

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

谢谢!

4

1 回答 1

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)
    }
}
于 2014-12-14T13:31:57.187 回答