考虑这个课程
class A {
private let model: Model
init() {
self.model = Model(service: self)
}
}
您可以看到这会失败,因为我在初始化所有内容之前使用self
。由于这是一个纯粹的快速类,因此无法调用super
初始化程序。
如果没有NSObject
超类,可能没有lazy
,你会如何在纯swift中执行此操作?
答案 0 :(得分:3)
从设计的角度来看,这基本上是错误的。您的班级A
引用了Model
和Model
个引用A
。
逻辑上,这两个中的一个应该是可选变量(以便您可以将其设置为nil
),或者是弱引用,否则您将拥有所有权圈和内存泄漏。
换句话说,这两个类中的一个应该是另一个的所有者,你不应该拥有共同的所有权。
让我们决定Model
是拥有的类,然后:
class A {
private let model: Model
init() {
let model = Model()
self.model = model
model.service = self
}
}
另一种选择是使用隐式展开的可选
来使用2阶段初始化class A {
private var model: Model!
init() {
self.model = Model(service: self)
}
}