Verwendung von Zustand und Abhängigkeiten
August 26, 2025 · View on GitHub
AppState bietet leistungsstarke Werkzeuge zur Verwaltung des anwendungsweiten Zustands und zur Injektion von Abhängigkeiten in SwiftUI-Ansichten. Durch die Zentralisierung Ihres Zustands und Ihrer Abhängigkeiten können Sie sicherstellen, dass Ihre Anwendung konsistent und wartbar bleibt.
Übersicht
- Zustand: Stellt einen Wert dar, der in der gesamten App gemeinsam genutzt werden kann. Zustandswerte können in Ihren SwiftUI-Ansichten geändert und beobachtet werden.
- Abhängigkeit: Stellt eine gemeinsam genutzte Ressource oder einen Dienst dar, der in SwiftUI-Ansichten injiziert und auf den zugegriffen werden kann.
Hauptmerkmale
- Zentralisierter Zustand: Definieren und verwalten Sie den anwendungsweiten Zustand an einem Ort.
- Abhängigkeitsinjektion: Injizieren und greifen Sie auf gemeinsam genutzte Dienste und Ressourcen in verschiedenen Komponenten Ihrer Anwendung zu.
Anwendungsbeispiel
Definieren des Anwendungszustands
Um den anwendungsweiten Zustand zu definieren, erweitern Sie das Application-Objekt und deklarieren Sie die Zustandseigenschaften.
import AppState
struct User {
var name: String
var isLoggedIn: Bool
}
extension Application {
var user: State<User> {
state(initial: User(name: "Guest", isLoggedIn: false))
}
}
Zugreifen auf und Ändern von Zustand in einer Ansicht
Sie können mit dem @AppState-Property-Wrapper direkt in einer SwiftUI-Ansicht auf Zustandswerte zugreifen und diese ändern.
import AppState
import SwiftUI
struct ContentView: View {
@AppState(\.user) var user: User
var body: some View {
VStack {
Text("Hallo, \(user.name)!")
Button("Anmelden") {
user.name = "John Doe"
user.isLoggedIn = true
}
}
}
}
Definieren von Abhängigkeiten
Sie können gemeinsam genutzte Ressourcen wie einen Netzwerkdienst als Abhängigkeiten im Application-Objekt definieren. Diese Abhängigkeiten können in SwiftUI-Ansichten injiziert werden.
import AppState
protocol NetworkServiceType {
func fetchData() -> String
}
class NetworkService: NetworkServiceType {
func fetchData() -> String {
return "Data from network"
}
}
extension Application {
var networkService: Dependency<NetworkServiceType> {
dependency(NetworkService())
}
}
Zugreifen auf Abhängigkeiten in einer Ansicht
Greifen Sie mit dem @AppDependency-Property-Wrapper in einer SwiftUI-Ansicht auf Abhängigkeiten zu. Dies ermöglicht es Ihnen, Dienste wie einen Netzwerkdienst in Ihre Ansicht zu injizieren.
import AppState
import SwiftUI
struct NetworkView: View {
@AppDependency(\.networkService) var networkService: NetworkServiceType
var body: some View {
VStack {
Text("Daten: \(networkService.fetchData())")
}
}
}
Kombinieren von Zustand und Abhängigkeiten in einer Ansicht
Zustand und Abhängigkeiten können zusammenarbeiten, um eine komplexere Anwendungslogik zu erstellen. Sie können beispielsweise Daten von einem Dienst abrufen und den Zustand aktualisieren:
import AppState
import SwiftUI
struct CombinedView: View {
@AppState(\.user) var user: User
@AppDependency(\.networkService) var networkService: NetworkServiceType
var body: some View {
VStack {
Text("Benutzer: \(user.name)")
Button("Daten abrufen") {
user.name = networkService.fetchData()
user.isLoggedIn = true
}
}
}
}
Bewährte Praktiken
- Zentralisieren Sie den Zustand: Halten Sie Ihren anwendungsweiten Zustand an einem Ort, um Duplizierung zu vermeiden und Konsistenz zu gewährleisten.
- Verwenden Sie Abhängigkeiten für gemeinsam genutzte Dienste: Injizieren Sie Abhängigkeiten wie Netzwerkdienste, Datenbanken oder andere gemeinsam genutzte Ressourcen, um eine enge Kopplung zwischen den Komponenten zu vermeiden.
Fazit
Mit AppState können Sie den anwendungsweiten Zustand verwalten und gemeinsam genutzte Abhängigkeiten direkt in Ihre SwiftUI-Ansichten injizieren. Dieses Muster hilft, Ihre App modular und wartbar zu halten. Entdecken Sie weitere Funktionen der AppState-Bibliothek wie SecureState und SyncState, um die Zustandsverwaltung Ihrer App weiter zu verbessern.
Diese Übersetzung wurde automatisch generiert und kann Fehler enthalten. Wenn Sie Muttersprachler sind, freuen wir uns über Ihre Korrekturvorschläge per Pull Request.