??在開發(fā)中有時(shí)候會根據(jù)字符串進(jìn)行對應(yīng)類的轉(zhuǎn)化械筛,這樣我們就可以動態(tài)根據(jù)服務(wù)器返回的字段,動態(tài)的加載類,比如優(yōu)酷赡盘,微博等APP會在節(jié)假日等動態(tài)的TabBar爪膊。這樣可以把蘋果審核的風(fēng)險(xiǎn)給排出权悟。
??在OC中根據(jù)一段字符串轉(zhuǎn)化為類,可以很方便的進(jìn)行推盛,只需要使用NSClassFromString
即可NSClassFromString(@"NewsViewController")
??但是在Swift中由于命名空間的存在導(dǎo)致這樣的轉(zhuǎn)化峦阁,會有一定的麻煩,我們可以用下面的方法進(jìn)行轉(zhuǎn)化耘成。
func getClass(stringName: String) -> Class {
//根據(jù)字符串獲取對應(yīng)的class榔昔,在Swift中不能直接使用
//Swift中命名空間的概念
guard let nameSpage = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {
print("沒有命名空間")
return
}
guard let childVcClass = NSClassFromString(nameSpage + "." + vcName) else {
print("沒有獲取到對應(yīng)的class")
return
}
guard let childVcType = childVcClass as? UIViewController.Type else {
print("沒有得到的類型")
return
}
//根據(jù)類型創(chuàng)建對應(yīng)的對象
let vc = childVcType.init()
return vc
}