OC和Swift的桥接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mayerlucky/article/details/52018115

  首次使用Markdown编写博客,尚在熟悉中。既然markdown支持HTML,那就暂且用HTML书写,回顾下淡忘的html标签。

首先创建一个swift工程,然后准备一个Swift类RedView和一个OC类BlueView相互桥接互用。

Swift调用OC类

方法一

  直接新建一个oc类,如下图:

  继续点击,出现重要提示,如图:

此提示会询问你是否配置一个OC的桥接头文件。点击确定,xcode会帮您配置,否则,用到的时候需要您手动配置。
OC桥接头文件如何使用? – 其实只需要在桥接头文件中导入所需要的调用的OC类就ok了。
点击创建桥接头文件,可以看到:

初始化BlueView.m和添加方法,且在桥接头文件中导入BlueView.h,如图:

在Swift中调用BlueView类和模拟器显示结果

方法二

手动添加桥接头文件


首先删除Xcode自动添加的桥接头文件,自己手动创建个头文件,命名为Handle-Bridging-Header.h,命名建议和Xcode自动创建的命名一样,增强通用性和可读性。

此时仅仅是创建了一个头文件,还没有对应给OC的桥接头文件,所以下面需要把手动创建的头文件变成桥接头文件。
点击target–>build setting.找到swift complier-code generation ,然后定位到 Object-C Bridging Header如图:

可以看到桥接路径定位缓存的仍然是xcode自动创建的路径,但是是找不到的。我们已经给删除了。然后绑定我们自己创建的头文件。

注意路径不要出错


运行结果仍然是好使的。如图:

OC类中调用Swift类

同样,OC中调用swift类必须导入swift的头文件,但是swift中不存在.h和.m之分,因此也需要桥接头文件

但是Swift转化成OC的桥接,从项目一建立就已经配置好了。不需要我们手动创建。这个桥接头文件究竟在哪呢?仍然来到swift compiler - code generation处。

定位到Objective-C Generated Interface Header Name,已经生成的OC接口头文件名,也就是Swift转OC的桥接头文件。OCAndSwift-Swift.h是隐藏的,在finder中找不到此文件。
注意:Objective-C Bridging Header对应的是路径,路径最后的部分是OC转Swift的桥接文件名;而Objective-C Generated Interface Header Name 对应的直接就是文件名,其实也是个路径,只不过直接位于项目工程下,且隐藏。


在使用的时候,只需要在OC类中导入文件名即可


在RedView.swift中的实现 和 在BlueView.m中新加入的方法(为了测试OC调用swift)如图:


测试OC调用Swift模拟器结果

重点说明下Swif转OC的桥接头文件

在finder中无法找到桥接文件,但是可以点击导入的头文件进入到文件名中查看里面内容

可以看到,目前工程中的三个swift文件转OC的结果。理论上来说Swift转OC的桥接头文件也可以自己创建,但是里面转化内容比较复杂,不像OC转Swift直接导进头文件即可。因此建议不要手创建。

展开阅读全文

没有更多推荐了,返回首页