Обновлено
Из iOS 13 , приложения могут иметь несколько активных окон, поэтому вам нужно получить доступ к нужному окну. Таким образом, вы можете получить доступ к окну любого View
, например:
self.view.window
, если вы действительно хотите получить доступ к UISceneDelegate
, вы можете получить к нему доступ:
self.view.window.windowScene.delegate
Старый: и НЕ рекомендуется:
Предполагая, что
- есть только один делегат сцены.
- Есть только одна сценаи одно окно.
- Все контроллеры представления в приложении являются частью этой одной сцены и ее окна.
Вы можете реализовать вспомогательную переменную в SceneDelegate
следующим образом:
private(set) static var shared: SceneDelegate?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
Self.shared = self
}
тогда вы можете получить к нему доступ в любом месте, как это:
SceneDelegate.shared?.window // or anything else