英文:
SwiftUI: How to get window in Objective-C
问题
Here's the Objective-C code for the provided Swift code snippet:
UIScene *scene = [[[[UIApplication sharedApplication] connectedScenes] allObjects] firstObject];
if ([scene.delegate isKindOfClass:[UIWindowSceneDelegate class]]) {
UIWindowScene *windowScene = (UIWindowScene *)scene;
UIWindow *window = windowScene.windows.firstObject;
}
This code converts the Swift code to Objective-C and handles the differences in scene delegation between the two languages.
英文:
let scene = UIApplication.shared.connectedScenes.first
if let sd: SceneDelegate = (scene?.delegate as? SceneDelegate) {
let window = sd.window
}
this is in Swift, I want to convert this into Objective-C. I have tried this:
UIScene *scene = [[[[UIApplication sharedApplication]connectedScenes]allObjects]firstObject];
but now there is no SceneDelegate
; in Objective-C there is UIKit's UIWindowSceneDelegate
.
also I wasn't able to access UIScenedelegate. Scenedelegate is in Swift and I am trying to get window in objective-c
but now I'm not able to access window in swiftUI.
答案1
得分: 5
检查 scene.delegate
以确保它符合协议,然后将协议强制转换为它,这样编译器将允许您使用协议的属性和/或方法。
UIScene *scene = [[[[UIApplication sharedApplication] connectedScenes] allObjects] firstObject];
if([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]){
UIWindow *window = [(id <UIWindowSceneDelegate>)scene.delegate window];
}
英文:
Check scene.delegate
to make sure it conforms to the protocol, then cast the protocol on it so the compiler will let you use the protocol properties and/or methods.
UIScene *scene = [[[[UIApplication sharedApplication] connectedScenes] allObjects] firstObject];
if([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]){
UIWindow *window = [(id <UIWindowSceneDelegate>)scene.delegate window];
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论