2015-04-14 6 views
22

Ich habe ein Auto und einen Fahrer. Sie beziehen sich gegenseitig. In der init() des Autos erstelle ich einen Treiber und weise ihn dem Fahrer zu. Der Fahrer hat eine didSet-Methode, die das Auto des Fahrers einstellen soll, damit sie sich gegenseitig verbinden.In Swift wird didset nicht ausgelöst, wenn es von init() aufgerufen wird

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 

Das didset wird jedoch nie ausgelöst. Warum?

+9

Eigenschaftsbeobachter werden während der Initialisierung nicht aufgerufen, siehe http://stackoverflow.com/questions/25230780/is-it-possible-to-allow-didset-to-be-during-initialization-in- swift –

+2

Danke! Wenn ich sowohl die Dokumentation von Apple als auch die Suche nach stackoverflow vermisse, sollte das mich abzüglich Reputation verdienen ... – uaknight

+0

@MartinR füge das bitte als Antwort hinzu, vielleicht? –

Antwort

19

Apple Documentation:

Die willSet und didSet Beobachter der übergeordneten Klasse Eigenschaften werden genannt, wenn eine Eigenschaft in einer Unterklasse initializer gesetzt, nachdem die Super initializer aufgerufen wurde. Sie werden nicht aufgerufen, während eine Klasse ihre eigenen Eigenschaften festlegt, bevor der Superklasseninitialisierer aufgerufen wurde.

+7

Sie können 'defer' als Workaround verwenden http://StackOverflow.com/a/33979852/2432781 –

Verwandte Themen