UIApplicationが接続されたSceneを保持しています。
外部ディスプレイへの接続などを行わない一般的なiOSアプリの場合は基本的にconnectedScenesは1つとなると思います。
以下のようなコードでオブジェクトを取得できます。
UIApplication.shared.connectedScenes.first?.delegate as! SceneDelegate
また、以下のようなユーティリティを定義しておくと使用が楽です。
extension SceneDelegate {
static var shared: SceneDelegate {
UIApplication.shared.connectedScenes.first?.delegate as! SceneDelegate
}
}
上記関数は以下のように使用ができ、簡単にUIViewControllerをSwiftUIから表示することができます。
let controller = UIViewController()
SceneDelegate.shared.window?.rootViewController.present(controller, animated: true)