Как изменить состояние вне представления?

У меня есть приложение 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 вне области представления?

0 ответов

Другие вопросы по тегам