我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Framework中实现OC和Swift的混编方案

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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混编的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Framework中实现OC和Swift的混编方案

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Framework中实现OC和Swift的混编方案

这篇文章主要为大家介绍了Framework中实现OC和Swift的混编方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-08

Android中使用socket使底层和framework通信的实现方法

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层 呢?android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用socket
2022-06-06

TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?

从主交易到传输,到插件式解决方案,每个厂商对HTAP的理解和实验方式都有自己的独到解法,在未来整个数据解决方案当中都会往HTAP中去牵引。那么在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?本文是腾讯云数据库总经理林晓斌先生在《DTCC 2
TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?
2021-03-26

队列在PHP与MySQL中的任务监控和任务调度的实现方案

引言在现代的Web应用程序开发中,任务队列是非常重要的一项技术。通过队列,我们可以将一些需要在后台执行的任务排队,并通过任务调度来控制任务的执行时间和顺序。本文将介绍如何在PHP与MySQL中实现任务的监控和调度,并提供具体的代码示例。一、
2023-10-21

Android中Listview下拉刷新和上拉加载更多的多种实现方案

listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明。 方案一:添加头布局和脚布局 android系统为listview提供了addfootview和addheadview两
2022-06-06

队列在PHP与MySQL中的负载均衡和自动扩容的设计思路和实现方案

一、引言队列是一种常用的数据结构,可以在PHP与MySQL中实现负载均衡和自动扩容的设计。本文将介绍队列的基本概念和使用场景,并提供针对PHP与MySQL的负载均衡和自动扩容的设计思路和实现方案。二、队列的基本概念队列是一种先进先出(FIF
2023-10-21

队列在PHP与MySQL中的消息分发和任务调度的设计思路和实现方案

一、引言随着互联网应用规模的不断扩大和用户需求的日益增长,系统的并发处理和任务调度能力成为一个重要的考量因素。而队列是一种常用的解决方案,能够有效地进行消息分发和任务调度。本文将介绍在PHP与MySQL中如何设计和实现队列的消息分发和任务调
2023-10-21

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录