swift通过字符串获取类型实例化对象问题

相信大家都碰到过轮播图跳转问题,公司需求变来变去,一会儿要跳网页一会儿要跳原生界面,跳网页不需要太多解释,跳原生事情就比较多了,我们公司就是这么蛋疼,但是需求下来了也没办法。之前解决方法都比较傻,基本就是写死那样固定跳哪几个原生界面,但是需求一直再变,程序也就自然要变。

于是和后台商量,直接传ios的控制器名称和安卓的活动名称来指定跳转哪个界面。基本上的意思就是通过后台传来的字符串转化成控制器类型再实例化之后跳转。于是上网搜索通过字符串获取类型等,有用的信息获取了一些,但是还是碰到一些坑与大家分享一下!

相信搜索过这类问题的朋友都知道NSClassFromString这个方法,通过字符串获取类型,我也看过几片博客介绍,基本都是通过如下方法

let namespace =Bundle.main.infoDictionary!["CFBundleExecutable"]as! String

        let clsName = namespace+ "."+ "UIViewController"

        let cls =NSClassFromString(clsName)as! UIViewController.Type

        let vc = cls.init()


在下已翻译成swift3.0的写法,当时我也是这样跟着写,namespace用来干啥的也不知道,但是发现直接崩溃了,cls是nil的。然后又试着去掉namespace发现又成功了,心里其实默默喷了

句什么烂博客,然后就开始用自己项目自定义的控制器,结果一运行妥妥的崩溃了。过程纠结了几次,最终是把namespace又给加上了,然后就成功了,于是满怀好奇的打印了一下namespace

,发现其实是项目名称,然后恍然大悟,因为自定义的控制器肯定是在自己的项目里的嘛,所以需要加上namespace命名空间,但是UIViewController是UIKit框架里的嘛,这样一想没毛病

,其实后来还试过把UIViewController换成String,不加命名空间的情况下也是行不通,当时更加纳闷了,难道之前的假设不成立?后来也是仔细一想,String是swift的类,但是NSClas

sFromString是NS开头的,是OC里的类,然后换成了NSString试了一下,恩,没毛病的。在下总结也是比较口语,希望有大神可以出来比较权威的解释一下!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值