Ich bin mir nicht sicher, ob dies ein Gegenmuster in dieser schönen neuen SwiftUI-Welt ist, in der wir leben, aber im Wesentlichen habe ich ein @EnvironmentObject mit einigen grundlegenden Benutzerinformationen, die meine Ansichten aufrufen können.
Ich habe auch ein @ObservedObject, das einige Daten besitzt, die für diese Ansicht erforderlich sind.
Wenn die Ansicht angezeigt wird, möchte ich dieses @EnvironmentObject verwenden, um das @ObservedObject zu initialisieren:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Leider kann ich die Umgebungsvariable erst nach der Initialisierung aufrufen:
"Das Instanzmitglied 'userData' kann im Eigenschaftsinitialisierer nicht verwendet werden. Eigenschaftsinitialisierer werden ausgeführt, bevor 'self' verfügbar ist."
Ich kann ein paar mögliche Routen vorwärts sehen, aber sie fühlen sich alle wie Hacks an. Wie soll ich das angehen?
init
, der Struktur einen Benutzer hinzuzufügen .Property wrappers are not yet supported on local properties
Grundsätzlich kann ich kein @ObservedObject in einer init-Methode erstellen.Antworten:
Hier ist der Ansatz (die einfachste IMO):
quelle
Anstatt eine Unteransicht zu erstellen, können Sie einen Dummy-Initialisierer hinzufügen,
"ViewObject"
damit Sie ihn aufrufen können, bevor Sie den echten Initialisierer aufrufenFür die Aufzeichnung habe ich es nicht getestet
quelle
Hier ist ein einfacher Weg dorthin:
Mit diesem Helfer funktioniert es:
quelle