I have created an ObservableObject like so:
class Status: ObservableObject {
@Published var status: StatusType = .stopped
}
Which uses a custom enum StatusType that has 4 states.
I am using this ObservableObject in a View to get and set StatusType's.
struct MyView: View {
@StateObject private var myStatus = Status()
var body: some View {
Button(action: {
switch myStatus.status {
case .stopped:
start()
myStatus.status = .started
// more cases...
}
}){
switch myStatus.status {
case .stopped:
Text("Stopped")
// more cases...
}
}
This works pretty well.
But when I try to use a @StateObject under the App protocol, it doesn't work. Xcode doesn't complain either.
I want to use the @StateObject to change my menuIcon.
struct MyApp: App {
@StateObject private var myStatus = Status()
private var menuIcon: String {
return myStatus.status == .started ? "started" : "stopped"
}
var body: some Scene {
MenuBarExtra {
// views
} label: {
// use menuIcon here
}
}
}
What am I missing? Would appreciate some pointers!
you have to observe the status object, You can make your Status a singleton. This ensures that there is only one instance of it throughout the app