1
let scene = UIApplication.shared.connectedScenes.first
if let sd: SceneDelegate = (scene?.delegate as? SceneDelegate) {
    let window = sd.window
}

这是在 Swift 中,我想将其转换为 Objective-C。我试过这个:

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

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

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

4

1 回答 1

3

检查scene.delegate以确保它符合协议,然后在其上强制转换协议,以便编译器允许您使用协议属性和/或方法。

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

if([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]){
    UIWindow *window = [(id <UIWindowSceneDelegate>)scene.delegate window];
}
于 2020-01-06T15:28:56.167 回答