如何实现OC与Swift混编

本文详细介绍了在Objective-C(OC)工程中引入Swift文件,以及在Swift工程中引入OC文件的步骤,包括创建桥接文件、配置工程设置、引用头文件等关键操作。通过实例演示了不同情况下的混编技巧,适用于既有OC代码又有Swift代码的项目开发。

之前一直没有总结这块的相关知识,现在有幸给大家介绍一下我自己的小经验,如有不对之处欢迎纠正!


苹果推出swift之后版本一直不稳定,每一次更新都会修改很多方法,这让我们这些程序员使用起来有些投鼠忌器,不过3.0版本出现之后swift趋于平稳,相信会有越来越多的开发者会开始使用swift进行APP开发。


那么问题来了,很多工程都是用OC语言开始开发的,如何才能引入swift文件呢?相反的,如果APP开发时用的是swift语言,而团队中其他成员使用的是OC语言,这个时候如何引用其他成员的OC文件呢?接下来,我就浅谈一下这两种情况下混编的小经验:


1、OC工程中引入swift文件


第一步:创建一个OC工程:取名“OCQuoteSwiftTest”,然后使用 Cocoa Touch Class 创建一个swift文件取名“Test”。

ps:记得语言选Swift哈



第二步:点击 next->finish,会弹出一个对话框,问你是否选择创建一个桥接文件,当然要选 Create Bridging Header。



创建完之后文件夹内会多出一个文件,如下图所示:



ps:这是我们 command+b 编译一下不会报错,不过这还不算引用成功。我们试一下使用Test类,这时就会报错找不到Test这个类,所以我们还需要做下面的工作。


第三步:配置“工程设置”,找到 Build Settings 一栏,搜索框内输入“packaging”,然后修改 Defines Module 属性为YES。



第四步:成功引入swift头文件

在ViewController.m中使用创建的swift文件,格式为:#import "OCQuoteSwiftTest-Swift.h",即:#import"工程名-Swift.h"

这时我们就算成功引入了swift文件,接下来我们验证一下。


Test类声明一个可选变量str,在ViewController.m的方法中创建Test类的实例并对其str属性赋值,打印赋值结果。


结果证明swift文件引入成功!



在OC工程里引用swift文件已经OK,可是这种情况下swift文件(Test类)中引用OC类(ViewController)怎么做呢?

其实我们只要将swift需要引用的OC类的头文件写入桥接文件中就可以了,不过没有提示,需要自己敲出来,在swift文件中引用OC类也是没有提示的。





2、Swift工程中引入OC文件


第一步:创建OC工程

第二步:创建OC类,并同时创建桥接文件

第三步:配置 Build Settings 的 Defines Module 选项为YES

第四步:在桥接文件中引入被引用的OC文件的头文件:#import "xxx.h"

第五步:在OC文件中使用swift类还是需要在.m中声明 #import "工程名-Swift.h"

ps:只能在.m中引用,在.h中引用报错!



3、在OC工程中引入swift文件,舍弃创建桥接文件的选择,手动创建桥接文件


第一步:引入swift文件


第二步:创建桥接文件,在下图右下角选择 Header File文件,直接拖进左侧Supporting Files文件夹中(当然也可以 command+n 创建)


注意头文件名字的命名规范:工程名称-Brdging-Header.h


创建之后的头文件:



第三步:桥接文件新建之后,在里面使用 #import 的方式来引用OC文件/库


第四步:也是最重要的一步,配置桥接文件路径

在 Build Settings 里面输入 Objective-C B,找到 Objective-C Bridging Header 选项,写入路径

路径格式:工程名/工程名-Bridging-Header.h

ps:记得把 Defines Module 属性 设为YES




注意:当工程名中含有 “-” 或者 “空格” 时,记住 在OC文件中引用swift文件时引入 “工程名-Swift.h”时 工程名里面的“-” 或者 “空格” 要写成下划线“_”




我把这三种情况写了3个小demo,欢迎大家下载指教,不要钱哟大笑大笑大笑

http://download.youkuaiyun.com/download/panjianlei1990/9793146

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值