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
    }
时间: 2024-10-05 04:58:25

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

字符串获取类、封装检测数字的方法

1.charAt()方法: 从整个字符串中找到某子字符,即返回指定位置的字符.charAt(str.length).里面的数字最大为字符串长度减一 eg:stringObject.charAt(index):如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串 var str = '妙味课堂'; var str = '妙味课堂'; // alert( str.length ); // alert( str.charAt() ); //默认为第0个 //

java反射机制,通过类名获取对象,通过方法名和参数调

try {//得到对象Class c = Class.forName("完整类名");Object yourObj = c.newInstance();//得到方法Method methlist[] = cls.getDeclaredMethods();for (int i = 0; i < methlist.length; i++) {Method m = methlist[i];}//获取到方法对象,假设方法的参数是一个int,method名为setAgeMethod sAg

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

java 反射机制:运行时的类信息(为框架服务的Bug存在)

反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样).在用它做其他事情之前必须先加载那个类的Class对象.因此,那个类的.class文件对于JVM来说必须是可获取的:那么在本地机器上,要么通过网络获得

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

Swift 反射机制,命名空间

1. 知道 Swift 中有命名空间        - 在同一命名空间下,全局共享!        - 第三方框架使用 Swift 如果直接拖拽到项目中,从属同一个命名空间,很有可能冲突!        - 以后尽量使用 cocoapod     2. 重点是要知道 Swift 中 NSClassFromString(发射机制)的写法        - 发射最重要的目的是解耦        - 提示:第一印象会发现一个简单的功能,写的很复杂.但是封装的好,弹性很大! 在程序中,当需要使用Stri

java 反射机制--根据属性名获取属性值

1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 [java] view plain copy /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getField(fieldName

C#反射通过类名的字符串获取生成对应的实例

在.net core 1.1环境下 今天项目中遇到这个问题了,稍微查了一下并没有现成的样例.自己实现了. 1 static void Main(string[] args) 2 { 3 TestGetAssembly(); 4 } static void TestGetAssembly() { AssemblyName name=new AssemblyName("Reflect");//我的程序集的名称为"Reflect" var result = Assembl

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&amp;BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动