Verwendungsübersicht

June 11, 2026 · View on GitHub

Diese Übersicht bietet eine schnelle Einführung in die Verwendung der Schlüsselkomponenten der AppState-Bibliothek in einer SwiftUI-View. Jeder Abschnitt enthält einfache Beispiele, die in den Rahmen einer SwiftUI-Ansichtsstruktur passen.

Definieren von Werten in der Anwendungserweiterung

Um anwendungsweite Zustände oder Abhängigkeiten zu definieren, sollten Sie das Application-Objekt erweitern. Dies ermöglicht es Ihnen, den gesamten Zustand Ihrer App an einem Ort zu zentralisieren. Hier ist ein Beispiel, wie Sie Application erweitern können, um verschiedene Zustände und Abhängigkeiten zu erstellen:

import AppState

extension Application {
    var user: State<User> {
        state(initial: User(name: "Guest", isLoggedIn: false))
    }

    var userPreferences: StoredState<String> {
        storedState(initial: "Default Preferences", id: "userPreferences")
    }

    var darkModeEnabled: SyncState<Bool> {
        syncState(initial: false, id: "darkModeEnabled")
    }

    var userToken: SecureState {
        secureState(id: "userToken")
    }
    
    @MainActor
    var largeDataset: FileState<[String]> {
        fileState(initial: [], filename: "largeDataset")
    }
}

State

State ermöglicht es Ihnen, einen anwendungsweiten Zustand zu definieren, auf den überall in Ihrer App zugegriffen und der geändert werden kann.

Beispiel

import AppState
import SwiftUI

struct ContentView: View {
    @AppState(\.user) var user: User

    var body: some View {
        VStack {
            Text("Hello, \(user.name)!")
            Button("Log in") {
                user.isLoggedIn.toggle()
            }
        }
    }
}

StoredState

StoredState speichert den Zustand mit UserDefaults, um sicherzustellen, dass die Werte über App-Starts hinweg gespeichert werden.

Beispiel

import AppState
import SwiftUI

struct PreferencesView: View {
    @StoredState(\.userPreferences) var userPreferences: String

    var body: some View {
        VStack {
            Text("Preferences: \(userPreferences)")
            Button("Update Preferences") {
                userPreferences = "Updated Preferences"
            }
        }
    }
}

SyncState

SyncState synchronisiert den App-Zustand über mehrere Geräte hinweg mit iCloud.

Beispiel

import AppState
import SwiftUI

struct SyncSettingsView: View {
    @SyncState(\.darkModeEnabled) var isDarkModeEnabled: Bool

    var body: some View {
        VStack {
            Toggle("Dark Mode", isOn: $isDarkModeEnabled)
        }
    }
}

FileState

FileState wird verwendet, um größere oder komplexere Daten dauerhaft im Dateisystem zu speichern, was es ideal für das Caching oder das Speichern von Daten macht, die nicht in die Grenzen von UserDefaults passen.

Beispiel

import AppState
import SwiftUI

struct LargeDataView: View {
    @FileState(\.largeDataset) var largeDataset: [String]

    var body: some View {
        List(largeDataset, id: \.self) { item in
            Text(item)
        }
    }
}

ModelState

🍎 ModelState verwaltet SwiftData-@Model-Objekte über AppState, indem ein gemeinsam genutzter ModelContainer injiziert wird. Es ist für View-Modelle, Dienste und anderen Nicht-View-Code gedacht; für reaktive Ansichten verwenden Sie SwiftDatas @Query zusammen mit dem von AppState bereitgestellten ModelContainer. SwiftData-Funktionen erfordern iOS 17+ / macOS 14+.

Beispiel

import AppState
import SwiftData

private func makeItemContainer() -> ModelContainer {
    do {
        return try ModelContainer(for: Item.self)
    } catch {
        fatalError("Failed to create ModelContainer: \(error)")
    }
}

extension Application {
    var modelContainer: Dependency<ModelContainer> {
        modelContainer(makeItemContainer())
    }

    var items: ModelState<Item> {
        modelState(container: \.modelContainer)
    }
}

@MainActor
final class ItemsViewModel: ObservableObject {
    @ModelState(\.items) var items: [Item]

    func add(_ item: Item) {
        $items.insert(item)
    }
}

Weitere Details finden Sie im ModelState-Verwendungsleitfaden.

SecureState

SecureState speichert vertrauliche Daten sicher im Schlüsselbund.

Beispiel

import AppState
import SwiftUI

struct SecureView: View {
    @SecureState(\.userToken) var userToken: String?

    var body: some View {
        VStack {
            if let token = userToken {
                Text("User token: \(token)")
            } else {
                Text("No token found.")
            }
            Button("Set Token") {
                userToken = "secure_token_value"
            }
        }
    }
}

Constant

Constant bietet unveränderlichen, schreibgeschützten Zugriff auf Werte im Zustand Ihrer Anwendung und gewährleistet so die Sicherheit beim Zugriff auf Werte, die nicht geändert werden sollen.

Beispiel

import AppState
import SwiftUI

struct ExampleView: View {
    @Constant(\.user, \.name) var name: String

    var body: some View {
        Text("Username: \(name)")
    }
}

Slicing State

Slice und OptionalSlice ermöglichen den Zugriff auf bestimmte Teile des Zustands Ihrer Anwendung.

Beispiel

import AppState
import SwiftUI

struct SlicingView: View {
    @Slice(\.user, \.name) var name: String

    var body: some View {
        VStack {
            Text("Username: \(name)")
            Button("Update Username") {
                name = "NewUsername"
            }
        }
    }
}

Bewährte Praktiken

  • Verwenden Sie AppState in SwiftUI-Ansichten: Property-Wrapper wie @AppState, @StoredState, @FileState, @SecureState und andere sind für die Verwendung im Geltungsbereich von SwiftUI-Ansichten konzipiert.
  • Definieren Sie den Zustand in der Anwendungserweiterung: Zentralisieren Sie die Zustandsverwaltung, indem Sie Application erweitern, um den Zustand und die Abhängigkeiten Ihrer App zu definieren.
  • Reaktive Aktualisierungen: SwiftUI aktualisiert Ansichten automatisch, wenn sich der Zustand ändert, sodass Sie die Benutzeroberfläche nicht manuell aktualisieren müssen.
  • Leitfaden zu bewährten Praktiken: Für eine detaillierte Aufschlüsselung der bewährten Praktiken bei der Verwendung von AppState.

Nächste Schritte

Nachdem Sie sich mit der grundlegenden Verwendung vertraut gemacht haben, können Sie sich mit fortgeschritteneren Themen befassen:


Diese Übersetzung wurde automatisch generiert und kann Fehler enthalten. Wenn Sie Muttersprachler sind, freuen wir uns über Ihre Korrekturvorschläge per Pull Request.