NSClassFromString(<#NSString * _Nonnull aClassName#>)
- Swift,调用这个方法后,创建的类却一直为空,WTF!正确的姿势是,要先获得命名空间,拼接"命名空间"+"."+"对应的字符串".
- 1.在Swift中, 如果想通过字符串创建一个类, 那么必须加上命名空间, 类型是可选类型,所以要解包
let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"]
guard let ns = nameSpace as? String else{
return
}
- 2.动态获取的命名空间是不包含"."的, 所以需要我们自己手动拼接, 类型依然是可以选的.将AnyClass类型转换为你想要创建的类型,这里用UIViewController做例子
let myClass: AnyClass? = NSClassFromString(ns + "." + "对应的字符串")
guard let myClassType = myClass as? UIViewController.Type else{
return
}
- 这样就完成了根据字符串,自定义创建一个类了myClassType,就是我们要的类,可以拿来实例化了.