我的意图是初始化视图控制器并将其设置为窗口 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()
}
当我将视图控制器作为依赖项传递时,似乎有什么问题?顺便说一句,我不喜欢将窗口作为依赖项传递给被调用的协调器,尽管这可行,但我不喜欢它。