Мое намерение состоит в том, чтобы инициализировать контроллер представления и установить его для окна rootViewController, а затем передать контроллер представления в качестве зависимости в AppCoordinator, где приложение решает, что делать с контроллером представления (заменить его сценой подключения или страницей входа , или даже домашний экран, если пользователь уже вошел в систему.
Проблема в том, что всякий раз, когда я это делаю, окно, кажется, не возвращает свой контроллер представления, а вместо этого появляется черный экран.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
var viewController = UIViewController()
self.window?.rootViewController = viewController
let appCoordinator = AppCoordinator(viewController: viewController)
appCoordinator.start()
window?.makeKeyAndVisible()
}
AppCoordinator.swift
import UIKit
import SwiftUI
class AppCoordinator: Coordinator {
var viewController: UIViewController
init(viewController: UIViewController) {
self.viewController = viewController
}
func start() {
let onboardingView = OnboardingView()
self.viewController = UIHostingController(rootView: onboardingView)
}
}
Если я обхожу AppCoordinator и устанавливаю все в делегате сцены, экран загружается правильно:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
var viewController = UIViewController()
let onboardingView = OnboardingView()
self.window?.rootViewController = UIHostingController(rootView: onboardingView)
window?.makeKeyAndVisible()
}
Что кажется неправильным, когда я передаю контроллер представления в качестве зависимости? Кстати, я не предпочитаю передавать окно в качестве зависимости вызываемому координатору, хотя это работает, я не предпочитаю это.