今天项目中需要用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以前是上面那样的,后来改了,不过总算解决了
网友评论