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

时间:2015-04-14 05:35:19

标签: 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

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

2 个答案:

答案 0 :(得分:37)

Apple Documentation

  

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

答案 1 :(得分:1)

init() {
    defer {
        driver = GmDriver()
    }
}