软件测试之性能测试(ios)——OC调用Swift代码

最近在oc工程里要引用swiftMonkeypaws,需要使用oc调用swift技术,里面踩了很多坑,这里简单记录一下。

1、oc调用swift

oc调用swift其实很简单,google一下就有很多的教程,可以参考文章1、2、3、4。总体上就是在要调用swift代码的时候,引入头文件 “模块名-Swift.h”,这个头文件对外不可显示,需要手动导入。可以在 Build setting 中查看:
在这里插入图片描述
现在我们在 OC 中添加这个头文件:
在这里插入图片描述
我们需要查看一下swift到底可以调用那些方法和类。这个时候,我们可以点进这个头文件中去。进入头文件往下拉,可以看到暴露出来的 Swift 的类名和方法:
在这里插入图片描述

2、oc调用swift ,涉及cocoapods

上面完全是主工程里使用当然毫无难度,但是我要引入的swiftMonkeypaws是要以cocoapods方式进行引入,这里面就有很多的问题。

2.1 引入头文件名字不一样

头文件要引入的格式为 #import <产品名/模块名-Swift.h>,参考文章5,我们可以在 Build Settings 中查看:
在这里插入图片描述
2.2、头文件引入的位置
头文件如果引用在pods工程的起点文件中,还是会报找不到头文件的错误,这里面我没有深入研究pods工程的编译原则,但是不难猜出因为是在pods工程的起点文件中,还没有开始编译pod工程里的swift文件,所以就没有生成oc调用swift的接口文件,导致头文件找不到。我这边的临时解决办法就是把头文件引用移动到了其他的位置
在这里插入图片描述

3、oc引用swiftMonkeypaws

oc引用swiftMonkeypaws,网上的文章也很多,可以参考文章6、7、8、9、10。对于参考文章8,矫正一下

var paws: MonkeyPaws?

class MonkeyUIPaws: NSObject 
{        
    @objc public func showMonkeyPawsINUITest ( window: UIWindow ) -> () {
        paws = MonkeyPaws(view: window)    
    }

     @objc class func test() -> () {
        print("test")
    }
}

如果不这么修正,你会收到 unrecognized selector sent to instance,主要原因是因为把MonkeyPaws设置成局部变量以后,这个界面释放以后,MonkeyPaws也被释放,再调用MonkeyPaws的方法就会引发这个错误。所以要把MonkeyPaws设置到类外面。对于unrecognized selector sent to instance这个错误的详细描述可以参考文章11、12。

参考文章:

1、https://blog.csdn.net/studying_ios/article/details/70146879
2、https://www.jianshu.com/p/754396e7e1bd
3、https://www.jianshu.com/p/9f757a09eacd
4、https://www.jianshu.com/p/979ff6350cb6
5、https://zhang759740844.github.io/2017/07/05/Swift%E5%92%8COC%E7%9A%84%E6%B7%B7%E7%BC%96%E5%AE%9E%E8%B7%B5/
6、http://www.php-master.com/post/151913.html
7、https://www.jianshu.com/p/34bf481d5c13
8、https://www.jianshu.com/p/b763b65005bd
9、https://gysxl.github.io/2017/11/03/%E5%9F%BA%E4%BA%8EXCUITest%E8%BF%9B%E8%A1%8C%E7%9A%84iOSMonkey%E6%B5%8B%E8%AF%95/
10、http://www.php-master.com/post/151913.html
11、https://moto0421.iteye.com/blog/1570876
12、https://juejin.im/entry/58eddde3570c350057f2b975

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值