SwiftUI @State in der ganzen App benutzen?
Guten Tag,
ich bin SwiftUI-Anfänger und habe ein bisschen rumprobiert mit einer App, die ich mir ausgedacht habe. Allerdings besteht diese aus mehreren views, und ich habe @State variablen, die ich auch in anderen files benutzen möchte. Wenn ich das versuche kommt eine Fehlermeldung. Warum diese Meldung kommt verstehe ich, aber ich habe leider keine Ahnung, wie ich mein Problem lösen kann. Es wäre sehr nett, wenn jemand mir helfen könnte.
Vielen Dank.
1 Antwort
Dazu musst du mit @Binding arbeiten, damit der State nicht lokal in der Struktur bleibt.
In der ersten View definierst du es als @State, gibst aber dein Wert – bzw. die Referenz – mit $value an die zweite View weiter:
struct FirstView: View {
@State var value: Int = 0
var body: some View {
VStack {
SecondView(value: $value)
}
}
}
In der zweiten View gibst du die Variable dann als Binding an:
struct SecondView: View {
@Binding var value: Int
var body: some View {
// hier kann value geändert werden und die
// Änderungen werden an FirstView hochgereicht
}
}
Hier findest du auch kein kleines Tutorial dazu:
https://www.ralfebert.de/ios/swiftui-bindings/
Wenn du statt primitiven Datentypen ganze Strukturen hast, die in mehreren Views benutzt werden, solltest du dich auch mit ObservableObject beschäftigen:
https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app
Dort kannst du steuern, welche Properties veröffentlicht werden und welche nicht.