Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器

Posted 三更小新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器相关的知识,希望对你有一定的参考价值。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
        
        window = UIWindow(frame: UIScreen.main.bounds)
        
        // 依据String名字拿到控制器(添加项目名称,命名空间,不能有数字和特殊符号)
        // 返回的是AnyClass? 需要as?强转
        // 控制器添加Type类型
        let rootControl = NSClassFromString("SwiftyDemo.ViewController") as? UIViewController.Type
        
        let vc = rootControl?.init()
        
        window?.rootViewController = vc
        
        window?.makeKeyAndVisible()
         
        return true
    }

   同时可以用info.plist获取命名空间

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
        window = UIWindow(frame: UIScreen.main.bounds)
        
        // 依据String名字拿到控制器(添加项目名称,命名空间,不能有数字和特殊符号)
        // 返回的是AnyClass? 需要as?强转
        // 控制器添加Type类型
//        let rootControl = NSClassFromString("SwiftyDemo.ViewController") as? UIViewController.Type
        
        // 获取命名空间的值,可选
        let str = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
        
        let con = NSClassFromString(str + "." + "ViewController") as? UIViewController.Type
        
        let vc = con?.init()
        
        window?.rootViewController = vc
        
        window?.makeKeyAndVisible()
         
        return true
    }

 

以上是关于Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器的主要内容,如果未能解决你的问题,请参考以下文章

反射 Mirror | Swift 动态性

反射 Mirror | Swift 动态性

12000+字Java反射,一起全面了解Java反射机制,为学习框架铺路

Swift 反射机制,命名空间

如何通过 Swift 扩展实现委托方法

Swift:实现快捷方式项目(3D 触摸)共享项目错误“AppDelegate 类型的值没有当前成员”