Wie erstelle ich eine SwiftUI View mit einem MVVM-Ansatz, wobei alle Funktionen asynchron sind, und für iOS 16?

Antwort

Um eine SwiftUI-View mit dem MVVM-Ansatz zu erstellen und dabei asynchrone Funktionen zu verwenden, kannst du die folgenden Schritte befolgen. Hier ist ein einfaches Beispiel, das zeigt, wie du dies in iOS 16 umsetzen kannst: 1. **Model**: Erstelle ein einfaches Datenmodell. 2. **ViewModel**: Erstelle ein ViewModel, das die Daten verwaltet und asynchrone Funktionen enthält. 3. **View**: Erstelle eine SwiftUI-View, die das ViewModel verwendet. ### 1. Model ```swift struct User: Identifiable { let id: Int let name: String } ``` ### 2. ViewModel ```swift import Foundation @MainActor class UserViewModel: ObservableObject { @Published var users: [User] = [] @Published var isLoading: Bool = false func fetchUsers() async { isLoading = true defer { isLoading = false } // Simuliere eine Netzwerkabfrage mit async/await await Task.sleep(2 * 1_000_000_000) // 2 Sekunden warten let fetchedUsers = [ User(id: 1, name: "Alice"), User(id: 2, name: "Bob"), User(id: 3, name: "Charlie") ] users = fetchedUsers } } ``` ### 3. View ```swift import SwiftUI struct ContentView: View { @StateObject private var viewModel = UserViewModel() var body: some View { NavigationView { VStack { if viewModel.isLoading { ProgressView("Loading...") } else { List(viewModel.users) { user in Text(user.name) } } } .navigationTitle("Users") .task { await viewModel.fetchUsers() } } } } @main struct MyApp: App { var body: some Scene { WindowGroup { ContentView() } } } ``` ### Erklärung - **Model**: Das `User`-Strukturmodell repräsentiert die Daten. - **ViewModel**: Die `UserViewModel`-Klasse verwaltet die Daten und enthält eine asynchrone Funktion `fetchUsers()`, die simuliert, wie Daten aus einem Netzwerk abgerufen werden. - **View**: Die `ContentView`-Struktur verwendet das `UserViewModel` und zeigt eine Liste von Benutzern an. Während die Daten geladen werden, wird ein `ProgressView` angezeigt. Dieses Beispiel zeigt, wie du den MVVM-Ansatz in SwiftUI mit asynchronen Funktionen in iOS 16 umsetzen kannst.

Frage stellen und sofort Antwort erhalten