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獲取命名空間app

    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
    }
相關文章
相關標籤/搜索