【问题标题】:In Swift, didSet doesn’t fire when invoked from init()在 Swift 中,从 init() 调用 didSet 时不会触发
【发布时间】:2015-04-14 05:35:18
【问题描述】:

我有车和司机。它们相互引用。在汽车的 init() 中,我创建了一个驱动程序并将其分配给驱动程序成员。 driver 成员有一个 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 永远不会触发。为什么?

【问题讨论】:

标签: swift


【解决方案1】:

Apple Documentation:

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

【讨论】:

    【解决方案2】:
    init() {
        defer {
            driver = GmDriver()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多