Как изменить состояние вне представления?
У меня есть приложение SwiftUI только для меню (Mac). Суть его в следующем:
// MyMainApp.swift
var body: some Scene {
MenuBarExtra("My App", image: "LoggedOutIcon") {
MenuBarView()
}
}
Я хотел бы динамически обновлять изображение до «LoggedInIcon» всякий раз, когда пользователь входит в систему, и «LoggedOutIcon», когда пользователь выходит из системы. Эта функциональность установлена в контроллере (без представления).
Я решил, что способ сделать это — передать мой основной контроллер моему приложению следующим образом:
// MyMainApp.swift
@StateObject var myMainController = MyMainController()
Внутри этого установите опубликованную переменную следующим образом:
// MyMainController.swift
@Published var loggedIn: Bool = false
А затем обновите вызов MenuBarExtra до
// MyMainApp.swift
MenuBarExtra("My App", image: myMainController.loggedIn ? "LoggedInIcon" : "LoggedOutIcon")
Хорошая новость: это работает. Плохая новость в том, что@StateObject var myMainController
строка вызывает следующее фиолетовое уведомление о гибели:
Доступ к объекту StateObject без установки в представлении. При этом каждый раз будет создаваться новый экземпляр.
...Похоже, мне следует избегать этого.
Вкратце: как лучше всего обновлятьMenuBarExtra
значок в приложении SwiftUI вне области представления?