Подтвердить что ты не робот

В Swift doSet не запускается при вызове из init()

У меня есть машина и водитель. Они взаимно ссылаются друг на друга. В автомобилях 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 никогда не срабатывает. Почему?

4b9b3361

Ответ 1

Документация Apple:

Наблюдатели willSet и didSet свойств суперкласса вызывается, когда свойство задается в инициализаторе подкласса после вызова инициатора суперкласса. Они не вызываются, когда класс устанавливает свои собственные свойства, прежде чем вызывается инициатор суперкласса.