swift与OC的混编

本文探讨了Swift与Objective-C混编的原因与步骤,包括语言发展趋势考量、项目迭代需求及第三方库兼容性问题。介绍了混编环境搭建过程,如创建Swift文件、设置bridging header等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要混编?

  • 语言发展趋势(TIOBE),Swift 排行持续上升, OC 排行呈重力下降
  • 项目正常迭代需要 
    • 很多第三方库仍然使用 OC 实现
    • 项目中原来已经用 OC 实现的模块如果使用 Swift 重写,代价稍大
    • 我们需要在项目中使用 Swift 才能真正碰到问题,解决问题

注:不是为了混编而混编。混编只是在对开发资源、项目管理和技术发展趋势进行综合衡量之后做出的比较合理的选择。

如何开始混编?

步骤

  1. 创建工程,Language 选择 Swift 或 Objective-C 都可以。

    这里写图片描述

  2. 创建 Swift 文件并添加 bridging header 文件

    这里写图片描述

    添加 Swift 文件时 Xcode 会自动提示你添加 bridging header 文件,选择 Yes 即可

  3. 进行两处关键设置

    这里写图片描述 
    这里写图片描述

    这两处设置 Xcode 默认都会设置好,可以把 Objective-C Bridging Header 和 Objective-C Generated Interface Header Name 改成自己想设置的名字。

至此Swift 与 Objective-C 混编的环境就算配置完成了。

XXX-Bridging-Header.h

如果需要在 Swift 中使用 OC 的代码或者库,只需要在这个文件中 import 相应代码或者库的头文件即可。

XXX-Swift.h

和 XXX-Bridging-Header.h 不同,XXX-Swift.h 文件不会出现在项目中,而是由 Xcode 自动生成,你可以在类似如下的路径下找到相应项目的 XXX-Swift.h 文件:(PS:演讲时没有写到PPT里面,实在抱歉)

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/Users/perry/Library/Developer/Xcode/DerivedData/XXX<span class="hljs-attribute" style="box-sizing: border-box;">-bhlzdinkujybftbjmgwjwclndmss</span>/Build/Intermediates/XXX<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>build/Debug<span class="hljs-attribute" style="box-sizing: border-box;">-iphonesimulator</span>/XXX<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>build/Objects<span class="hljs-attribute" style="box-sizing: border-box;">-normal</span>/x86_64/XXX<span class="hljs-attribute" style="box-sizing: border-box;">-Swift</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>h</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

如果需要在 OC 中使用 Swift 代码,在使用的文件中 #import XXX-Swift.h (PS:其他一些在 OC 中使用 Swift 代码的注意事项会在后面详细说明)

查看 XXX-Swift.h 文件中的代码:

这里写图片描述

不难发现这个文件中的内容其实是将 Swift 中的代码转换成了 OC 的代码。

注:如果对项目进行清理操作,这个文件也会被删除,而且在重新构建的过程中,只有在所有的 Swift 代码都编译通过的情况下才会重新生成这个文件。

结合框架的混编

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值