I am having a problem updating the view with data after loading that data asynchronously.
Here is my code:
import SwiftUI
import Foundation
class CurrentUser {
var id = ""
var nickname = ""
}
class UserService {
var currentUser = CurrentUser()
static var shared = UserService()
private init() {
}
}
class ViewModel: ObservableObject {
func fetchCurrentUser() async {
let currentUser = UserService.shared.currentUser
currentUser.id = "007"
currentUser.nickname = "James Bond"
// clearly I am missing something that would probably go here?
}
}
struct ContentView: View {
@StateObject private var viewModel = ViewModel()
let currentUser = UserService.shared.currentUser
var body: some View {
VStack(spacing: 10) {
Text("ID: \(currentUser.id)")
Text("Nickname: \(currentUser.nickname)")
}
.task {
await viewModel.fetchCurrentUser()
}
}
}
If I put a breakpoint in the ViewModel, I can type “po currentUser.id” into the console and see that the data has in fact loaded, but it is not being displayed in the view.
Any help would be greatly appreciated.