Swift-我想从我的viewcontroller中的SceneDelegate.Swift访问信息

Swift-我想从我的viewcontroller中的SceneDelegate.Swift访问信息,swift,Swift,使用AppDelegate时,这行代码允许我在AppDelegate和视图控制器之间发送变量 let firstName = AppDelegate.shared().givenName 对于sceneDelegate,我能做些什么?我可以建议您使用如下用户默认设置: // Set UserDefaults.standard.set(self.currentZoomLevel, forKey: "zoomLevel") // Read if let zoomLevel = UserDefaul

使用
AppDelegate
时,这行代码允许我在AppDelegate和视图控制器之间发送变量

let firstName = AppDelegate.shared().givenName

对于
sceneDelegate
,我能做些什么?

我可以建议您使用如下用户默认设置:

// Set
UserDefaults.standard.set(self.currentZoomLevel, forKey: "zoomLevel")
// Read
if let zoomLevel = UserDefaults.standard.object(forKey: "zoomLevel") as? CGFloat {
                return zoomLevel
            }
另一种方法应该是这样的

var window: UIWindow?

// On your scene delegate you have an instance variable Window
       func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
           guard let windowScene = (scene as? UIWindowScene) else { return }
           let window = UIWindow(windowScene: windowScene)
            self.window = window
}
使用window对象,您可以访问导航控制器并直接访问viewController:

var wantedViewController: DesiredViewController?
    let _ = window?.rootViewController?.children.forEach({ navigation in
                if let navController = navigation as? UINavigationController {
                    if let tabBar = navController.viewControllers.filter({ viewController in
                        viewController is MyTabBarController
                    }).first {
                        if let container = tabBar.children.filter({ $0 is ContainerViewController }).first as? ContainerViewController {
                            if let innerViewController = container.children.filter({ $0 is RootViewController }).first as? RootViewController {
                                wantedViewController = innerViewController.orderedViewControllers.filter({ $0 is DesiredViewController }).first as? DesiredViewController
                            }
                        }
                    }
                }
            })
这段代码有点复杂,因为我在项目中的结构,我的视图控制器在TabController中,可能你的代码没有那么复杂,你会发现视图控制器更容易。 只需调试,看看它是如何发生的