OC调用Swift4.0的各种坑

简述:最近几年苹果主推swift,OC已经很少更新了,处于维护状态。所以慢慢多了很多OC混编Swift的项目,但是其实swift调用OC还是挺简单的,把OC项目慢慢转成swift问题不大。swift可以算是OC更上层的语言,我这里说的坑都是关于Swift转OC的,很奇葩吧,还有把Swift项目转成OC的,一句话公司需求,怼得程序员无言以对。(废话不多说了,后面全是骂项目经理和产品的。。。省略一万字)

OC和Swift混编的基础设置就不说了,可以看我之前的一个文章
https://www.jianshu.com/p/69ba19692bae

一. OC调用Swift中的Class类这里

1.这个类必须是继承NSObjec或者NSObjec的子类

2.Class前面要加@objcMembers (这个关键字是让该类所有属性和方法加上@objc),3.0之前是苹果自动帮你加上的,据说嫌弃打包会偏大一些,后面改成玩家自己加。
例如:@objcMembers class CustomServiceTool: NSObject {}

3.类中的协议、枚举、结构体这些东西的调用
① 协议:直接在前面加一个@objc
@objc protocol CustomServiceToolDelegate: NSObjectProtocol {}

②枚举:试了一下,必须定义出Int类型,前面加@objc才能调用(毕竟swift的枚举比OC强大太多)
@objc enum CPLineType: Int {
case schoolToHome = 0
case homeToSchool
case return
}

③结构体:在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能够再建一个类,在类里写个方法来返回struct中的值

坑点:
1.每次在一个类前面加个@objcMembers的时候都需要重新编译一遍才能打出提示(混编期间,报错请不要怀疑自己的代码,大部分编译一下就没事了。。。)
2.有种特殊的情况,比如我一个OC控制器中调用了swift写的view,然后其他用swift写的控制器需要调用OC控制器,这时候要是只是把OC控制器写到桥接文件中是会报错的。(这种就是混编项目比较变态的情况)------------解决办法:swift写的View用向前声明( @class BannerView);
3.swift中的一些类型是OC没有的,或者类型名字差不多但是类型完全不同
例如:
swift中的Int定义成可选类型的时候,这时候OC是调不了swift的Int类型,解决方式,定义普通Int型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,715评论 4 61
  • 生日,对每个人来讲,差不多是这一年之中最重要的日子。今天是文小瑜的生日,她原本想,作为一个三十几岁的女人,上有老下...
    四月天02阅读 4,320评论 0 0
  • 随着WE的水晶被SSG攻破,伴随着娃娃和米勒无可奈何的“恭喜三星”的声音响起,本土赛区LPL在这场在中国全程举办的...
    _慕情_阅读 1,607评论 0 1
  • 挑灯夜谈,凌晨才结束,勿挂念,一切安好,早安!
    何时再出发阅读 1,148评论 0 0

友情链接更多精彩内容