这是场景。我有三个类: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 的 init(我无法控制 B;由 Apple 提供),因此我无法保证这一点,因为我无法向 A 的初始化程序添加额外的参数。
我想确保使用 A(b)
或 A(a,b)
调用 A,而不是 A(a)
code>,以确保 b 已初始化。我尝试寻找解决方案或考虑使用协议(protocol)或扩展的解决方案,但我无法弄清楚。我得到答案的结束是通过this答案,但它并没有真正达到我想要的效果。
所以我有两个问题(一个使另一个无效): 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)
}
}
关于oop - 如何向必须实现所需初始值设定项的子类添加所需属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465614/