В 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 никогда не срабатывает. Почему?
Ответы
Ответ 1
Документация Apple:
Наблюдатели willSet и didSet свойств суперкласса вызывается, когда свойство задается в инициализаторе подкласса после вызова инициатора суперкласса. Они не вызываются, когда класс устанавливает свои собственные свойства, прежде чем вызывается инициатор суперкласса.