[swift] NSClassFromString 无法获得该类
2015-10-12 10:10
1491 查看
在写OC的时候需要用 NSClassFromString(classStringName)获得一个类,如果存在就用这个类型来声明一个对象,
但是在swift的时候却往往得不到这个类,为什么呢?
从截图看
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/7de5597ea94c84848d01b1e5276c466f.png)
分析swift里面的对象还有该工程的名字CFBundleName
所以我们可以分析出只要加上该工程的名字就可以得到这个类了写法如下
而如果不想这样做呢
还有一种方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/62ead3343f2e171ca87b4e390ccfc18e.png)
就是在该类声明的时候加上@objc修饰符
置于为什么需要objc,参考前一篇《Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic》
但是在swift的时候却往往得不到这个类,为什么呢?
从截图看
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/7de5597ea94c84848d01b1e5276c466f.png)
分析swift里面的对象还有该工程的名字CFBundleName
所以我们可以分析出只要加上该工程的名字就可以得到这个类了写法如下
extension NSObject { // create a static method to get a swift class for a string name class func swiftClassFromString(className: String) -> AnyClass! { // get the project name if let appName: String? = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleName") as! String? { // generate the full name of your class (take a look into your "YourProject-swift.h" file) let classStringName = appName! + "." + className // return the class! return NSClassFromString(classStringName) } return nil; } }
而如果不想这样做呢
还有一种方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/62ead3343f2e171ca87b4e390ccfc18e.png)
就是在该类声明的时候加上@objc修饰符
置于为什么需要objc,参考前一篇《Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic》
相关文章推荐
- Swift2.1 语法指南——属性
- swift中cell的两种创建区别和extension的使用。让我们开发更有条理
- Swift之贪婪的UIButton
- swift单例和oc单例
- swift中防止闭包循环引用
- 在swift中 @objc 、private 和事件问题
- swift中方便调试的日志输出
- coredata swift 简单入门
- 如果使用swift,先不用pod
- swift第一个HelloWord实现
- Swift学习之UI开发初探
- 16.Swift 播放视频
- 15.Swift 录制音频
- swift is only available on iOS 9.0 or newer 报错
- [ios][swift]swift中如果做基本类型的转换
- Swift 解决dismissViewControllerAnimated关闭当前Controller无效的问题
- 类方法的使用
- model的使用
- tableview使用自定义类,页面跳转,本地存储
- swift中tableview的使用