Previously, it was recommended to use the @MainActor
annotation for ObservableObject
implementation.
@MainActor final class MyModel: ObservableObject { let session: URLSession @Published var someText = "" init(session: URLSession) { self.session = session } }
We could use this as either a @StateObject
or @ObservedObject
:
struct MyView: View { @StateObject let model = MyModel(session: .shared) }
By moving to Observation
, I need to the @Observable
macro, remove the @Published
property wrappers and Switch @StateObject
to @State
:
@MainActor @Observable final class MyModel { let session: URLSession var someText = "" init(session: URLSession) { self.session = session } }
But switching from @StateObject
to @State
triggers me an error due to a call to main-actor isolated initialiser in a synchronous nonisolated context.
This was not the case with @StateObject
of @ObservedObject
.
To suppress the warning I could :
- mark the initializer as
nonisolated
but it is not actually what I want - Mark the
View
with@MainActor
but this sounds odd
Both solutions does not sound nice to my eye.
Did I miss something here?