From 279b85b4505f59f5e3feef93d72658a236f2ba13 Mon Sep 17 00:00:00 2001 From: Eric Jensen Date: Tue, 8 Oct 2024 21:27:16 -0400 Subject: [PATCH] Prevent mutating `@Published` StoreDetailsViewModel values on background queues --- .../PulseUI/Features/Settings/StoreDetailsView.swift | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Sources/PulseUI/Features/Settings/StoreDetailsView.swift b/Sources/PulseUI/Features/Settings/StoreDetailsView.swift index 1c0a9e2d1..bf4f1ff1b 100644 --- a/Sources/PulseUI/Features/Settings/StoreDetailsView.swift +++ b/Sources/PulseUI/Features/Settings/StoreDetailsView.swift @@ -13,7 +13,7 @@ struct StoreDetailsView: View { var body: some View { StoreDetailsContentsView(viewModel: viewModel) - .onAppear { viewModel.load(from: source) } + .task { await viewModel.load(from: source) } #if os(tvOS) .padding() #else @@ -97,18 +97,16 @@ enum StoreDetailsViewSource { // MARK: - ViewModel -final class StoreDetailsViewModel: ObservableObject { +@MainActor final class StoreDetailsViewModel: ObservableObject { @Published private(set) var storeSizeLimit: Int64? @Published private(set) var sections: [KeyValueSectionViewModel] = [] @Published private(set) var info: LoggerStore.Info? @Published private(set) var errorMessage: String? - func load(from source: StoreDetailsViewSource) { + func load(from source: StoreDetailsViewSource) async { switch source { case .store(let store): - Task { - await loadInfo(for: store) - } + await loadInfo(for: store) case .info(let value): display(value) }