注册
iOS

OC项目用Swift开发方便吗?

前言


公司有个项目一直是用 OC 进行开发,现在想改成 Swift 来开发。那先说一下为什么有这样的想法,我们都知道 Swift 代码更简单,易维护,安全而且快,网络上也是很多描述,那我们主要的是担心一旦变成混编工程,会不会出现很多问题,还有如何解决这些问题。性能问题方面Swift 和 OC 共用一套运行时环境,而且支持 Swift 桥接 到 OC上,所以呢,问题不大。如果有不同的想法,也欢迎留意指教。


桥接文件


我们只要在 OC 项目中,创建一个 swift 文件,系统就会弹出桥接文件,我们点击 "Create Bridging Header"即可。


cf299866d3c40ea430c170818fdda210.png


OC 工程接入 Swift


OC 类 引用 Swift 类


如上面我们创建了一个 swift 文件,里面写一些方法提供给 OC 使用。

@objcMembers class SwiftText: NSObject {

func sayhello() -> String{

return "hello world"

}
}

class SwiftText2: NSObject {

@objc func sayhello() ->String{

returnOCAPI.sayOC()

}
}

这里我们有关键字2个,1个是@objcMembers,表示所有方法属性都可以提供给 OC 使用。另外一个是@objc,表示修饰的方法属性才可以提供给OC使用。


那我们 OC 类怎么用这个 swift 文件呢。
先在我们该类添加头文件

#import "项目Target-Swift.h"

然后我们点进去看下。


5173c31af15439bd837960ba87099d48.png


可以看到我们写的 swift 文件类,方法,属性,都被转化为 OC 了,有了这个我们直接使用即可。


OC类 使用 swift Pod库


说实话,这种用的比较少,但有时候我们真的觉得 swift Pod库 会更好用,那我们怎么去处理呢?


首先我们要搞懂一点,有些是支持使用的,如PromiseKit,有些是不支持使用的如Kingfisher


先说第一种支持使用的,我们直接导入#import <PromiseKit/PromiseKit.h>即可。


那要是第二种的话,我们还有一种办法,就是先用 swift 写一个该库管理类,然后里面引用我们该库的内容,我们通过 @objc 来提供给我们 OC 使用。


Swift类 引用 OC 类


如果我们编写的 Swift 类,想要用到 我们 OC 的方法,那我们如何处理呢?


我们直接在桥接文件"Target-Bridging-Header.h"里面,直接导入头文件#import "XXX.h"即可使用。


Swift类 使用 OC pod库


其实这个更简单,和 Swift 工程引入 OC pod库一样,在该类里面导入头文件即可。

import MJRefresh

遇到问题


问题1:引入swift pod库 问题


如果我们 OC 项目 是没有 使用use_frameworks!。那我们导入swift Pod库 就会报错。


那我们就在工程配置里面 Build Settings里面,搜索 Defines Module, 更改为 YES 即可。


7b0dc13ba4f97367f9ca9ebf09d8866e.png


问题2:OC 类继承问题


OC的类是不能继承至Swift的类,但Swift 类是可以继承 OC类的,其实方式也是"Target-Bridging-Header.h"导入头文件即可。


问题3:宏定义问题


我们自己重新一份
原来的是

#define kScreenWidth        [UIScreen mainScreen].bounds.size.width                      
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

现在的是

let kScreenWidth = UIScreen.main.bounds.width
let kScreenHeight = UIScreen.main.bounds.height

有一些,我们可以定义问方法来替代宏。


问题4:OC经常调用swift库导入问题


我们知道xxx-Swift.h都是包含所有swift 提供给 OC 使用的类,所以我们可以把xxx-Swift.h放到 pch 文件里面,就可以在任意一个 OC 工程文件直接调用 swift 类。


OC 在线转为 swift


提供一个链接,可以支持 OC 转为 swift。
在线链接


最后


经过上面的总结,OC 项目 使用 swift 开发 的确是问题不大,使用过程中可能也会遇到编译问题,找不到文件问题,只要细心排查,也是很容易解决,那等后续项目用上正轨,还会把遇到的坑填补上来,如有不足,欢迎指点。


作者:可爱亲宝宝
链接:https://juejin.cn/post/7153564241659297806
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册