• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

苹果开发之:OC项目用Swift开发方便吗?

武飞扬头像
juejin
帮助373

前言

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

桥接文件

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

image.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"

然后我们点进去看下。

screenshot-20221012-161944.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 即可。

screenshot-20221012-165202.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 开发 的确是问题不大,使用过程中可能也会遇到编译问题,找不到文件问题,只要细心排查,也是很容易解决,那等后续项目用上正轨,还会把遇到的坑填补上来,如有不足,欢迎指点。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanegbf
系列文章
更多 icon
同类精品
更多 icon
继续加载