SwiftUI:如何在 Objective-C 中获取窗口

Mad*_*rea 2 objective-c swift swiftui uiscenedelegate

let scene = UIApplication.shared.connectedScenes.first
if let sd: SceneDelegate = (scene?.delegate as? SceneDelegate) {
    let window = sd.window
}
Run Code Online (Sandbox Code Playgroud)

这是 Swift 语言,我想将其转换为 Objective-C 语言。我已经尝试过这个:

UIScene *scene = [[[[UIApplication sharedApplication]connectedScenes]allObjects]firstObject];
Run Code Online (Sandbox Code Playgroud)

但现在没有了SceneDelegate;在 Objective-C 中,有 UIKit 的UIWindowSceneDelegate.

我也无法访问 UIScenedelegate。Scenedelegate 在 Swift 中,我试图在 Objective-C 中获取窗口,但现在我无法在 swiftUI 中访问窗口。

cla*_*ome 5

检查scene.delegate以确保它符合协议,然后将协议投射到其上,以便编译器允许您使用协议属性和/或方法。

UIScene *scene = [[[[UIApplication sharedApplication] connectedScenes] allObjects] firstObject];

if([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]){
    UIWindow *window = [(id <UIWindowSceneDelegate>)scene.delegate window];
}
Run Code Online (Sandbox Code Playgroud)