Swift 和 OC 混合编程

自己学了一段时间的 Swift ,从最开始看 Swift 2.3 的《写给大忙人看的Swift》,在 Xcode8 下很多示例代码都不能好好玩下去,然后看到了 SwiftGG 翻译组针对 Swift 官方文档的中文译本。算是正式开始了对 Swift 的学习。对 Swift 的喜爱不仅仅是因为他是新的语言,是 iOS 开发未来的趋势。而且还有一个很重要的一点单单就是因为 Swift 代码看起来就是非常漂亮啊。

写在前面的话

对于Swift的学习根本还是一种还没有正式入门的感觉。所以没有办法像 OC 那样驾轻就熟,很多语法都还没有完全掌握,因为时间原因,也因为最近确实发生了一些事情。导致最近学习的热情比较的低,而且年关在即,很多工作上生活上的事情都需要认真梳理一遍。减少了在学习上的努力,是在是罪大恶极。技术圈在这个时候也发生了一些大事情。微信开源的组件 Mars 滴滴和手Q相继 po 出了自己的动态化解决方案。下一年应该会是动态化更广泛应用的一年吧,很多 app 动态化将成为标准配置。但是唯一比较遗憾的是,这些解决方案还是基于 OC 的。但是这也并不妨碍我学习 Swift 的激情,毕竟一切 app 的生杀大权都掌握在苹果手中的,而且,苹果还有一个并不开放的动态库。

简单的学了一些 Swift 的相关东西,就开始手痒想要实践一下了。本来打算使用 Swift 重新写一个项目,但是苦于需求一直源源不断,重写压力也是非常的大。还有一个最大的原因,对 Swift 的掌握还没有真正算是一个 Swift 开发者。实在没有能力将原有项目中的组件转化为 Swift ,所以还是决定在原来的代码中,尝试将一些类用 Swift 来表达。

这也解决了在 Swift 项目中,优秀的第三方库确实没有 OC 丰富,而作为现在非常热门的开发语言,很多比较好的效果什么的也只有 Swift 版本这样的问题。

其实无论如何,其实都是 OC 和 Swift 之间的交互。

在 Swift 中使用 OC 类

如果在Swift类中使用OC的代码,那么就需要使用桥接文件了。

这是我们在平常的OC项目中创建一个新的类

点击按钮 Create Bridging Header

就会生成一个项目名-Bridging-Header.h文件,这其实貌似就是一个很平常的.h文件。

然后就只需要像 Import 一个普通类一样把你需要在 Swift 中使用的所有 OC 类在这个.h 文件中添加进来,然后就能够在 Swift 代码中正常的使用 OC 的方法了。

这里的MUserInfo其实就是我项目中的一个单例类了。这里要注意的是,虽然使用的是 OC 的类,但是使用的时候依然是使用 Swift 的语法。这个也没什么需要注意的。

需要注意的是:在 Swift 类中使用的 OC 的方法,还是需要使用 Swift 的语法。

刚刚说的导入,就是直接在刚刚说的桥接文件中写入如下代码。

1
#import "MUserInfo.h"

在 OC 中使用 Swift 类

这个也是非常的简单,

TARGETS- Build Settings中选择Swift Complier-General

然后分别将Install Objective-C Compatibility HeaderObjective-C Generated Interface Header Name 选项 改为 YES项目名-Swift.h

然后在使用Swift类的时候,只需要在使用的时候像导入头文件一样倒入 项目名-Swift.h这个文件。然后就可以愉快的使用了。

结语

没有解语,期待下次分享!

##

CepheusSun wechat
订阅我的公众号,每次更新我都不一定会告诉你!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%