I really don't understand what the issue is here. I've thrown @MainActor
on (almost*) everything that might be relevant and it's still telling me I'm sending things.
@MainActor
final class PrimaryViewModelImplementation: PrimaryViewModel, ObservableObject {
@Published var array: [Int] = []
@MainActor private let fetcher: DataFetcher
private let validator: DataValidator
private let dataStateUpdater: DataStateUpdater
init(
fetcher: DataFetcher,
validator: DataValidator,
updater: DataStateUpdater
) {
self.fetcher = fetcher
self.validator = validator
self.dataStateUpdater = updater
}
@MainActor
func refreshData() async {
let rawData = await fetcher.getData()
let filteredData = validator.pickValidItems(from: rawData)
self.array = filteredData
}
func confirmData() {
dataStateUpdater.setDataState(confirmed: true)
}
}
I get an error pointing at the i
in await
, saying
Sending 'self.fetcher' risks causing data races
Sending it where? Everything here is on the main actor!
*I haven't made the DataFetcher
type itself @MainActor
, because there's no reason it should be. In this example it's a stand-in for something like a network request (in reality it calls Task.sleep
and returns some random data).