Swift中根据字符串创建类型

今天项目中需要用Swift根据字符串创建类型,上网找了半天所有文章都告诉我和Objective-C不太一样,需要命名空间,下面这样子


let className = "NewClass"

//1.获取命名空间

let nameSpace  =Bundle.main.infoDictionary!["CFBundleExecutable"]

guard let ns = nameSpaceas?Stringelse{

return

}

//2.根据字符串获取完整的类名,再调用NSClassFromString方法

let newClass:AnyClass? =NSClassFromString(ns+"."+className)

guard let newClassType = newClassas ? UIViewController.Typeelse{

return

}

//3.根据创建的类型,进行实例化

let vc = newClassType.init()

然而,试了N多次,都没有成功创建出类型来

后来灵机一动,试试完全按照Objective-C来:


let className = "NewClass"

guard let newClassType = NSClassFromString(className) as? UIViewController.Type else {

return

}

let vc = newClassType.init()

竟然成功了!竟然成功了!竟然成功了!

半下午找问题所在,竟然是这样的,我只想说真是大坑

后来想想,可能是我现在用的Swift3.0,也许3.0以前是上面那样的,后来改了,不过总算解决了

你可能感兴趣的:(Swift中根据字符串创建类型)