给定两个相互引用的类,其中一个引用是
weak
,我如何在本地初始化时保留它?这是代码的结构:
class Generator {
weak var machine: Machine!
public init(for machine: Machine) {
self.machine = machine
}
func start() {
// ... code to start the generator
}
func generate() {
machine.didGenerate(value: 1)
}
}
class Machine {
public lazy var generator: Generator = Generator(for: self)
func start() {
generator.start()
}
func didGenerate(value: Float) {
// Use the value here
}
}
以下用法有效(在 MacOS 环境中给出的示例):
let machine = Machine()
func viewDidLoad {
machine.start()
}
但是这不起作用:
func viewDidLoad {
let machine = Machine()
machine.start()
}
不保留
machine
类中的Generator
引用。
我怎样才能保留它?
尝试使用
unowned
而不是 weak
,但也不起作用。