Здесь возможен подход.
1) Использовать собственную публикацию Combine в ViewRouter
как
class ViewRouter: ObservableObject {
@Published var currentPage: Constants.Views = Constants.Views.login
}
2) Создать экземпляр элемента ViewRouter
в AppDelegate
class AppDelegate {
var viewRouter = ViewRouter()
...
func presentView(with pushNotification: [String: AnyObject]) {
// set here new value
self.viewRouter.currentPage = Constants.View.push
}
3) В SceneDelegate
используйте viewRouter
из AppDelegate
в качестве объекта среды для ContentView
(или MotherView
, если вы используете его как root представление)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let contentView = ContentView().environmentObject(appDelegate.viewRoute)
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
Таким образом, вы используете один ViewRoute
объект, измененный в AppDelegate
и обработанный в MotherView
.