这是场景。我有三个课程:A
,B
和C
。类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(b)
或A(a,b)
调用A,而不是A(a)
,以确保初始化b。我试图寻找解决方案或考虑使用协议或扩展的解决方案,但我无法弄清楚。我得到答案的结果是通过this回答,但它并没有真正做到我想要的。
所以我有两个问题(一个使另一个无效): 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)
}
}