在Swift中,从init()调用时,didSet不会触发

uak*_*ght 37 swift

我有一辆车和一个司机.他们互相引用.在汽车的init()中,我创建了一个驱动程序并将其分配给驱动程序成员.驱动程序成员有一个didSet方法,该方法应该设置驱动程序的汽车,从而将它们相互链接.

class GmDriver {
    var car: GmCar! = nil
}

class GmCar {
    var driver: GmDriver {
        didSet {
            driver.car = self
        }
    }
    init() {
        driver = GmDriver()
    }
}

let myCar = GmCar()
println(myCar.driver.car) // nil
Run Code Online (Sandbox Code Playgroud)

但是,didSet永远不会触发.为什么?

iyu*_*una 41

Apple文档:

在调用超类初始值设定项之后,在子类初始值设定项中设置属性时,将调用超类属性的willSet和didSet观察者.在调用超类初始化程序之前,类在设置自己的属性时不会调用它们.

  • 您可以使用`defer`作为解决方法http://stackoverflow.com/a/33979852/2432781 (14认同)