版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heipingguowenkong/article/details/51683986
在oc中大家都知道,使用classFromString可以很轻松的根据一个类的名称来获取一个类。但是在swift中再使用calssFromString来获取一个类名时,却却只能得到一个nil!!这到底是为什么呢?
经过本人的各方面努力终于找到了答案!!在此和大家分享一下!并不是上面的方法废弃掉了,而是swift的类名规范和oc的有了区别:
1. swift中使用classFromString时要在类名前面加上项目app名称:
获取appName的方法:
注意以上获取的appName是有问题的,swift中的app命名方式是这样的:myAppName_switch;但是以上方法获取的appName是这样的:myAppName switch ;所以仅此方法获取的类依然是nil!!所以要加上适当的修改:
最后的endName才是可以用的appName
4.接下来就可以使用classFromString了:
好了就这么愉快的解决了!!!以下是完整方法^_^
希望对大家有所帮助哦!!!觉得不错可以点个赞哦!谢谢!!!
func swiftClassFromString(className: String) -> AnyClass! {
// get the project name
if let appName: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String? {
let indexStart = appName.startIndex.advancedBy(10)
let indexEnd = appName.endIndex.advancedBy(-6)
let subStr = appName.substringToIndex(indexStart)
let subStr2 = appName.substringFromIndex(indexEnd)
let endName = "\(subStr)_\(subStr2)"
let classStringName = "\(endName).\(className)"
// return the class!
return NSClassFromString(classStringName)
}
return nil;
}