2015-04-14 14 views
22

Ho un'automobile e un autista. Si riferiscono reciprocamente. In auto init() creo un driver e lo assegno al membro del driver. Il membro del conducente ha un metodo didSet che dovrebbe impostare l'auto del conducente, quindi collegarsi reciprocamente tra loro.In Swift, didSet non si attiva se invocato da init()

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 

Tuttavia, il didSet non si accende mai. Perché?

+9

Gli osservatori di proprietà non vengono chiamati durante init, consultare http://stackoverflow.com/questions/25230780/is-it-possible-to-allow-didset-to-be-called-during-initialization-in- swift –

+2

Grazie! Manca sia la documentazione di Apple che la ricerca dello stackoverflow dovrebbe davvero guadagnarmi meno la reputazione ... – uaknight

+0

@ Martinin per favore aggiungilo come risposta, forse? –

risposta

19

Apple Documentation:

Gli osservatori willSet e didSet di proprietà della superclasse sono chiamati quando una proprietà è situato in un inizializzatore sottoclasse, dopo l'inizializzazione superclasse è stato chiamato. Non vengono chiamati mentre una classe sta impostando le sue proprietà, prima che sia stato chiamato l'inizializzatore della superclasse.

+7

È possibile utilizzare 'defer' come soluzione alternativa http://stackoverflow.com/a/33979852/2432781 –

Problemi correlati