如何在 iOS 14 @main 文件中获取 UIWindow 值?
Posted
技术标签:
【中文标题】如何在 iOS 14 @main 文件中获取 UIWindow 值?【英文标题】:How to get UIWindow value in iOS 14 @main file? 【发布时间】:2020-06-30 07:41:58 【问题描述】:我可以通过以下实现访问 didFinishLaunchingWithOptions。但是,我需要 UIWindow 变量。我不知道如何得到它。我正在使用 Xcode 12 测试版。 ios14,SwiftUI 生命周期。
import SwiftUI
@main
struct SSOKit_DemoApp: App
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene
WindowGroup
ContentView()
class AppDelegate: NSObject, UIApplicationDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
print("hello world!!!")
return true
【问题讨论】:
当时还没有窗口,为什么需要呢? 我想集成一个sso sdk。我们需要使用 UIWindow(根视图控制器)初始化 sdk。以前(swift ui 1.0)我从 SceneDelegate 获得了 UIWindow。 【参考方案1】:从 iOS 13 开始,可以安全地假设获取对关键窗口的引用的正确方法是通过 UIWindowSceneDelegate
。
@main
struct DemoApp: App
var window: UIWindow?
guard let scene = UIApplication.shared.connectedScenes.first,
let windowSceneDelegate = scene.delegate as? UIWindowSceneDelegate,
let window = windowSceneDelegate.window else
return nil
return window
[...]
【讨论】:
太棒了?。谢谢? 这可能只有在只有一个窗口和一个场景的情况下才有效。也就是说,它不适用于 iPad 或 macOS 上的多任务处理。【参考方案2】:iOS 14.7
@main
struct TestApp: App
var window: UIWindow?
guard let scene = UIApplication.shared.connectedScenes.first,
let windowScene = scene as? UIWindowScene else
return nil
return .init(windowScene: windowScene)
【讨论】:
请添加一些解释。以上是关于如何在 iOS 14 @main 文件中获取 UIWindow 值?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?
如何将变量从 PyQt5 UI 返回到 Main 函数 - Python
如何在 vscode 中使用自己的 javascript 文件获取智能感知
Swift UI 2 DocumentGroup 获取导航栏按钮操作