这篇文章主要为大家介绍了Framework中实现OC和Swift的混编方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
背景:
iOS工程中实现的OC和Swift混编的方案和实现步骤已经很多了,在此不做赘述,本篇文章需要描述的是实现在Framework下的混编。
解决方案:
必要的设置(Framework Target对应的BuildSetting):
Defines Module - YES
Product Module Name - framework名称
Install Objective-C Compatibility Header - YES
Objective-C Generated Interface Header - framework名称-Swift
Objective-C Bridging Header - framework名称/ProductModuleName-Bridging-Header.h(设置后编译会报错,后面会给出解决方案)
桥接文件-Swift调用OC时可以在该文件中添加OC头文件
OC调用Swift:
Swift类使用@objcMembers进行修饰,继承自NSObject或其子类
Swift类定义
#import "ProductName/ProductModuleName-Swift.h"一般默认为framework的名称
Swift调用OC:
在ProductModuleName-Bridging-Header.h文件中引入Swift需要调用的OC头文件
在这个桥接文件里面引用你想暴露给Swift调用类的头文件
说明:这个桥接文件需要自己手动创建
坑:
在OC类中引用Swift编译之后的头文件,必须采用"ProductName/ProductModuleName-Swift.h"方式,使用ProductModuleName-Swift.h方式,会提示找不到该文件
如果未设置Objective-C Bridging Header,引用ProductName/ProductModuleName-Swift.h头文件之后依然无法在OC类中调用Swift类,因为设置Objective-C Bridging Header后,才会编译Swift类到ProductModuleName-Swift.h中
设置Objective-C Bridging Header后Swift类被翻译成OC类,才可以被OC调用
设置Objective-C Bridging Header后编译报错using bridging headers with framework targets is unsupported,解决方案就是修改ProductModuleName.h这个文件名称为其他名称,比如:ProductModuleNameHeader.h
这个文件改动之后可能会出现头文件引用导致的问题,需要自己动手解决
以上就是Framework中实现OC和Swift的混编方案的详细内容,更多关于Framework OC Swift混编的资料请关注编程学习网其它相关文章!
本文标题为:Framework中实现OC和Swift的混编方案
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- 详解flutter engine 那些没被释放的东西 2022-12-04
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- Android实现轮询的三种方式 2023-02-17
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- Flutter实现底部和顶部导航栏 2022-08-31
