相信不少人开始从OC转向Swift了,毕竟是个趋势,而且多学一门语言也是极好的,Swift特性也相当之多。我们项目中暂时还是部分转Swift,所以是混编项目,下面讲讲怎么在混编项目中添加Swift类以及相互调用。以及如何添加单元测试:
总结了混编项目中添加单元测试中的一些问题和流程:
一.首先,添加一个单元测试的target,(swift版的):
1.选择xcode顶部导航栏的 File —> New —> Target —> iOS Unit Testing Bundle —> next 然后到建立target界面,如下图:

注意语言选择swift, Project 选择你的工程名;填好点击 finish 就创建好了,创建好之后如下图:

2.创建好之后开始配置单元测试跑的时候需要的依赖,以及要跑的单元测试 target 和 文件,如下图,进入 Edit Scheme 界面:

点击后选择 Edit Scheme… 进入后选择Build,如下图:

勾好后进入 Test 如下图:

如果有多余的 target 记得去掉;
到这里就可以跑起来了,跑单元测试的快捷键为 command + U
3.如果你添加了自己的测试类,需要在编译文件里自行加入,如图所示. 添加之后,如果是纯 Swift 的单元测试就可以跑起来了;

二.这是个 swift 的单元测试,下面介绍在 swift 版的单元测试中使用 OC
1.首先,和 Swift 项目中添加 OC 混编一个流程,在该 Swift 单元测试的 target 下创建一个 OC 文件,会弹出询问你是否需要创建 bridge 文件的提示, 选择创建:
2.图解上面步骤,首先创建一个 Unit Test Case 文件,选完 Next

然后记得选择语言为 OC 填完 Next:

然后选择文件要添加到的 Target 选完确定:

会弹出创建桥接文件的提示,选择创建:

创建完之后如下图所示:

3.然后在该文件中加入需要在单元测试中使用到的 OC 文件就可以了,记住即使是在 Swift 中引入的自定义的 OC 类也要在这里再引入,否则会找不到(如果依赖的是 Swift 的单元测试文件也在这里引入):

三.现在就完成了,如果自己又添加了新的单元测试文件,重复: 一. 的第三步;以及 二. 的第二步; 就可以了
四.记住不要引入子工程的文件,否则跑的时候会报找不到文件,以下是系统默认给你引入的pch文件引用路径, 如果其中包含子工程文件,记得去掉:


六.如果是项目中添加Swift类以及使用,执行第: 二~五 步就可以了,只不过 target 是工程的 target 而不是单元测试的 target ; 如果要在OC类中使用 Swift 类 ,在该 OC 类中 #import "Swift.h" 然后就可以直接使用了 但是注意要被OC类调用的 Swift 的协议,方法和属性等需要有如下图的 @objc 声明:

而Swift中调OC类就要如以上第二步所说的在 ***-Bridging-Header.h 文件中 #import 该 OC 文件就可以简单调用了。最后祝你在混编中玩(bei)的(keng)开(dao)心(ku)
网友评论