2
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.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Mad Burea
  • 83
  • 8

1 Answers1

5

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];
}
clawesome
  • 1,223
  • 1
  • 5
  • 10