Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)

待兔 等级 419 1 1

前言:
最近一段时间比较忙,公司项目比较多,直到现在年后过来以 后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代Object-C成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧!

今天我们主要说一下Objective-C和Swift混编所需要注意的一些事项,以及本人在实际项目中所踩过的一些坑。

一、 在Objective-C中引入Swift文件

1.想要在原来的老项目上调用Swift的类的话,这个时候可以直接选择创建一个Swift文件,当点击创建的时候Xcode会提示创建一个桥接文件如下图:

WechatIMG2031.jpeg

WechatIMG2032.jpeg

WechatIMG2034.jpeg

这里的 “xxxx-Bridging-Header.h”文件就是Xcode自动帮我们创建好的桥接文件

2、文件创建完成以后还需要做以下的配置:

WechatIMG2052.jpeg

Defines Module: 是否定义模块。默认app类的工程为NO,framwork工程默认为YES。
Product Name: 产品名称,在这里在需要使用Swift文件的地方引入 “xxxx-Swift”头文件就可以使用了 xxxx为产品名称 如下图,我的项目名为 OCASwiftTest

WechatIMG2053.jpeg

二、Swift文件中引入OC的文件

在swift项目中创建一个OC文件的时候,Xcode 也会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件
名字:工程名-Bridging-Header.h
把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

注意:

1、OC项目在导入swift文件前 先按照系统提示创建桥接文件,
2、在 targets -> Build Settings -> Packaging 中设置Defines Module 为YES
3、在OC中调用swift文件的时候,swift中的类 要继承NSObject
不然没办法在OC中调用
4、OC中调用swift文件需要导入”工程名 -Swift.h"
(这个是build Setting -> Packaging->Product Module Name 的名字,而这个属性默认是工程的名字)
5、写完记得command + B 编译 一下
6、swift项目 引用OC文件也需要创建 桥接文件,在这个桥接文件中导入OC文件的头文件
7、桥接文件只有一个,作用只是为了 swift 引用OC文件,OC引用swift 文件虽然也需要创建桥接文件
但是不需要在桥接文件中 导入swift文件
8、如果一个项目既有OC引用swift 也有swift引用OC ,就先设置OC调用swift文件
在桥接文件 导入OC文件,OC可以定义PCH文件导入”工程名 -Swift.h"

在这里说一下,如果不想使用Xcode提示创建的桥接文件,也可以自己手动创建

WechatIMG2054.jpeg

WechatIMG2057.jpeg

创建完自定义的桥接文件以后再设置一下文件路径就可以了:

Build Setting -> Swift Compiler - Code Generation中 设置Objective-C Bridging Header 为自定义的桥接文件相对于工程的绝对路径,也就是项目总文件夹的路径,如果在第一层,就直接写自定义的桥接文件的名file.h,如果在下一层,文件夹/桥接文件 app/file.h

本篇文章先到这,以后会更新问题以及解决方案和纯Swift开发所需要注意的问题。

收藏
评论区