Recipe: SwiftUI view scaffold
Drop-in template for a production SwiftUI view with loading, error, and empty states wired to a Meridian-licensed API.
Scaffold
import SwiftUI
struct ContentView: View {
@StateObject private var vm = ViewModel()
var body: some View {
Group {
if vm.isLoading { ProgressView() }
else if let error = vm.errorMessage { Text(error) }
else if vm.items.isEmpty { Text("Nothing here yet") }
else { List(vm.items) { item in Text(item.title) } }
}
.task { await vm.fetch() }
}
}ViewModel
@MainActor
final class ViewModel: ObservableObject {
@Published var items: [Item] = []
@Published var isLoading = false
@Published var errorMessage: String?
func fetch() async {
isLoading = true; defer { isLoading = false }
do {
let data = try await MeridianAPI.shared.getItems()
items = data
} catch { errorMessage = error.localizedDescription }
}
}