swift 打包sdk_在封装SDK中Swift和OC混编之相互调用

oc和swift混编之相互调用.jpg

在非SDK中:

1、swift调用oc

步骤:

创建 工程名-Bridging-Header.h

放入oc的头文件,swift即可调用

在swift项目中或者在oc项目中,创建oc或者swift文件,Xcode都会提示问你是否要创建桥接文件,点击确认Xcode就会自动创建,名称的格式是:工程名-Bridging-Header.h

把swift想要调用的oc的头文件放在这个自动创建的桥接的文件里面,就直接可以调用oc了。是不是很方便呢,当然,如果系统提示的时候,你没有调用,你也可以自己手动创建。

手动创建swift调用oc的头文件,

步骤:

创建Header File,删除里面内容

工程名-Bridging-Header.h进行命名,可自定义

在Build Setting -> Swift Compiler - Code Generation 中,拖入刚才自己手动创建的文件,会自动生成路径。

2、oc调用swift

步骤:

Targets ->Build Settings -> Packaging中

设置 Defines Module 属性为YES

同上路径,设置Product Module Name,默认为工程名称,用来修改导入到oc文件中的头文件的名称,可不修改。

在需使用到swift的oc类中,导入系统自动生成的Product Module Name(工程名)-Swift.h,即#import "工程名-Swift.h"

在swift暴露出来的方法和属性上要加@objc,command B成功这样才可以在oc中调用swift的类了。

注:1. swift中写的类一定要集成于NSobject,否则无法调用

2. 如果多个oc类需要使用,则可以添加到PCH文件中

在封装SDK中:

1、swift调用oc

iOS 制作framework时,swift调用OC,不支持桥接,故得换一种方式调用。

步骤:

点击target ->Build Settings -> Allow Non-modular Includes In Framework Modules 设置为YES

然后在 Build Phases 中 Headers 的把你想要调用的oc文件暴露到Public中去

然后在对外的统一接口文件中暴露这个头文件,如下图所示:

SDK中swift调用oc暴露方法.jpg

这样设置完毕之后,你就可以愉快的调用啦!

2、oc调用swift

同样的方式,在SDK中会提示找不到Product Module Name -Swift.h 这个头文件

步骤:

这里需要将Product Module Name -Swift.h这个头文件的引用改为引用#import 这个头文件

【JWEmotionTrackeriOSSDK就是你封装的SDK名称】

总结:oc通过xxx-swift.h调用swift【系统自动生成】。swift通过xxx-Bridging-Header.h调用oc【系统提示生成或手动创建】创建oc项目,xcode不会自动创建桥接文件。需要先创建xxx-Bridging-Header.h,才会生成xxx-swift.h文件。这句话很重要,如果不创建桥接文件,那么会提示 添加好 头文件之后 调用的时候,Bad receiver type XXX,这时候,需要手动创建桥接文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络上常用的一些网站

域名查询 Whois 查询 站长工具 http://whois.chinaz.com/ 是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过…

字符串替换:用参数字符数组成员替换字符串中的占位符(面试题)

1、问题描述: 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。 则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数…

华为手机怎么设置应用不全屏显示_手机投屏智能电视画面比例不合适怎么办?...

手机投屏到电视的比例不对怎么办知乎上有网友私下:“苹果手机屏幕镜像投屏到电视上,画面不能全屏,然后在网上查了一下是因为显示比例的问题,请问怎么解决?”这个问题说简单也简单,说难也难。说简单是因为想…

bootstrap精简教程

bootstrap 的学习非常简单,并且它所提供的样式又非常精美。只要稍微简单的学习就可以制作出漂亮的页面。 bootstrap中文网:http://v3.bootcss.com/ bootstrap提供了三种类型的下载: 1、用于生产环境的bootstrap 编译并压缩后的CSS、JavaScri…

群晖docker安装cms_Nas码农篇:群晖Docker安装Gitlab

Git大多数码农来说都很熟悉,团队协作开发必备。今天来分享下在群晖Docker上安装gitlab。群晖上安装gitlab有两种方式,一种是直接安装套件中心的gitlab,另一种是在docker中自定义安装。我们这里选择后者,因为这种方式可以安装最新版…

微信红包问题:找出某个出现次数超过红包总数一半的红包的金额(面试题)

1、问题描述 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gif…

手把手教你使用CocoaPods管理你的iOS第三方开源类库

手把手教你使用CocoaPods管理你的iOS第三方开源类库 本文转载自:http://kittenyang.com/cocoapods 鉴于我开这个博客的初衷是记录自己平时的技术积累,而我平时又属研究iOS最多,因此这个博客在一定程度上可以说是以iOS技术为主的博客。既然研究…

Find Minimum in Rotated Sorted Array II

Question: https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目: Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? 思路…

alt复制选区就会卡 ps_PS入门视频教程笔记整理(二)工具栏介绍一

这几期会慢慢的更,工具栏的相关介绍还有一些简单有趣的应用~1、移动工具和画板工具 (1)移动工具选择相应的图层进行拖拽移动的操作■自动选择:不勾选的话——只有一个图层被选中(移动当前所选择的图层里的内容)勾选的话——无论你点击哪一个地方进行拖拽…

测试Markdown

一级标题 二级标题 四级标题 这是高阶标题(和一级标题效果一样) 这是次阶标题(等同二阶标题) 无序列表 *1 *2 *3 无序列表 -1 -2 -3 有序列表 1.你大爷 2.你大伯 3.你叔 4、你哥 这是一个引用 第二个引用 第三个…

MyBatis collection的两种形式——MyBatis学习笔记之九

与association一样,collection元素也有两种形式,现介绍如下: 一、嵌套的resultMap 实际上以前的示例使用的就是这种方法,今天介绍它的另一种写法。还是以教师映射为例,修改映射文件TeacherMapper.xml如下(点…

面试题:最常见最有可能考到的C语言面试题汇总

1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL(无符号长整型) 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一…

int linux 原子操作_linux c++编程之多线程:原子操作如何解决线程冲突

在多线程中操作全局变量一般都会引起线程冲突&#xff0c;为了解决线程冲突&#xff0c;引入原子操作。1.线程冲突#include #include #include #include int g_count 0;void count(void *p){Sleep(100); //do some work//每个线程把g_count加1共10次for (int i 0; i < …

透明明兼容

opacity:0.5; filter:alph(opacity50);转载于:https://www.cnblogs.com/yjhua/p/4580864.html

ORA-00119错误的解决。

今天在启动服务器上的ORACLE时遇到如下错误&#xff1a;SQL> startup;ORA-00119: invalid specification for system parameter LOCAL_LISTENERORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’然后&#xff0c;在网上找了一些资料&#xff0c;解决了…

python查询斐波那契数列通项公式_分享一个神奇的操作系统——斐波那契+MACD,每一波都有20%以上的收益!...

斐波那契数列&#xff0c;又称兔子数列&#xff0c;或者黄金分割数列。指的是这样一个数列&#xff1a;0、1、1、2、3、5、8、13、21……从第三项起&#xff0c;它的每一项都等于前两项的和。为什么是兔子数列?我们假设兔子在出生两个月后&#xff0c;就有繁殖能力&#xff0c…

FPGA 状态机设计

数字系统有两大类有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;&#xff1a;Moore状态机和Mealy状态机。 Moore状态机 其最大特点是输出只由当前状态确定&#xff0c;与输入无关。Moore状态机的状态图中的每一个状态都包含一个输出信号。这是一个典型…

Cisco堆叠配置步骤+链路聚合实例

步骤:配置堆叠堆叠主: switch 1 priority 15copy run startup-configreload slot 1堆叠备:switch 1 renumber2switch 1priority 15copy run startup-configreload slot 1连接堆叠线缆配置端口聚合interface Port-channel2descriptionxxxxswitchport mode accessswitchport acce…

c++面试常考的知识点汇总

1. 链表和顺序表的优缺点&#xff0c;在什么场合下适合顺序表&#xff0c;什么场合下适合用链表。 1&#xff09;顺序表存储原理&#xff1a;顺序表存储是将数据元素放到一块连续的内存存储空间&#xff0c;存取效率高&#xff0c;速度快。但是不可以动态增加长度优点&#xf…

aimesh node重启_ASSIMP的数据结构

数据结构是对文件的描述&#xff0c;也是我们想要获取的最终产物&#xff0c;一般来说我们会用这个结果映射到我们自己的模型里面去(这样做是为了降低对这个项目的依赖&#xff0c;如果你的模型都用别人的&#xff0c;还搞毛啊)1.aiScene &#xff1a;根节点struct aiScene{uns…