Swift和OC混编

作者: helloxiaogui | 来源:发表于2016-05-11 14:09 被阅读1283次

有时候当我们用到Swift写的第三方库时,就不得不用到Swfit和OC混编。

举个🌰,如果你想在你的工程里用到Charts…

首先,创建一个OC工程名为testSwift(Language选Objective-C即是)举个例子,要在我的工程里面添加Charts这个第三方库,戳这个github:

https://github.com/danielgindi/Charts

屏幕快照 2016-05-11 上午10.21.51.png

参考Usage,会发现如果你的工程的 Deployment Target (在PROJECT->Info->Deployment Target下)不是8.0以上(比如7.1),那么你就不能通过cocoa pods 导入这个第三方库,而是要手动拖入这个Charts库。用到的是它的Classes文件,在这:

屏幕快照 2016-05-11 上午10.44.29.png

把它拖入工程


屏幕快照 2016-05-11 上午10.45.33.png
屏幕快照 2016-05-11 上午10.49.18.png

如果在你的ViewController.m可以执行通过下面这句,就说明这个库导入成功,你可以开始用Charts,

 CombinedChartData *chartData = [[CombinedChartData alloc]initWithXVals : nil];

build一下,出现Use of unresolved identifier 'CGFloat'或者Use of unresolved identifier 'CGFloat'诸如此类问题, 由于这个Classes 文件全都是用swift语言写的,而这里CGFloat是OC语言,要用到oc 和swift混编才行。

OC和Swift混编环境搭建

1.配置define modules为yes
点击工程文件->TARGETS->BuildSettings->Packaging 将Defines Modules 设置为yes, Product Module Name设置为你的工程名

屏幕快照 2016-05-11 上午11.10.27.png

此时,系统自动生成 "工程名-Swift.h" 这个文件,只是它不显示出来你看不见而已,先放着,这个文件千万别手动创建!!

2.创建bridging文件
方法1:手动创建xxxx-Bridging-Header.h(这里xxxx是工程名)
新建一个.h文件(File->New->File):

屏幕快照 2016-05-11 上午11.18.59.png

注意这里名字一定要命名为: 你的工程名-Bridging-Header 生成完长这样:

屏幕快照 2016-05-11 上午11.24.46.png

然后点击工程文件->TARGETS->Build Settings->Swift Compolier - CodeGeneration 下配置Briging文件(注意!这里要写的路径,是直指.h文件)


屏幕快照 2016-05-11 上午11.36.56.png

为了让你的工程在其他电脑也能运行通过,这里要把路径改成这样:


屏幕快照 2016-05-11 上午11.40.48.png

方法二:在工程新建一个swift文件(选cocoa Touch Class, Subclass一定是NSObject!!语言选Swift)这个时候


屏幕快照 2016-05-11 上午11.52.32.png

选择Create,这个时候工程里面就回自动生成 工程名-Bridging-Header.h这个文件

这个时候Swift和OC混编的环境就基本配置完成了

那么上门的工程可以build通过吗

----------------显然还不行--------------

  1. 刚提到过我们Swift文件里面要用到 OC的 CGFloat, 要去 工程名-Bridging-Header.h 文件下import 这个CGFloat所在类的.h文件
屏幕快照 2016-05-11 下午12.13.01.png

即:Swift 要用到OC的类,就要去工程名-Bridging-Header.h 文件下 import它的类的头文件

2.还有,刚刚在ViewControrller.m下,我们调用了

     CombinedChartData *chartData = [[CombinedChartData alloc]initWithXVals : nil];

这里是在OC里面使用Swift, 所以在这个.m下要导入系统的头文件:#import "工程名-Swift.h"(前面说过这个是系统自动生成)


屏幕快照 2016-05-11 下午12.17.48.png

即:在OC里用Swift, 要在import "工程名-Swift.h"

现在,再build 一下我们的工程,应该是可以通过啦~
~~~~~~~~~~~~~~~ 一些小结 ~~~~~~~~~~~~~~~
1.阅读这个库的api,首先要了解它的用法,这个库要怎么导入,要怎么用
2.可以先自己创建一个简单的Demo先用一下这个库,这样的话出了问题也比较容易找到,当小Demo可以build 起来,再试着按部就班地放到大的项目中。
3.关于OC和Swift混编的方法,网上的文章很多,鱼龙混杂,可以看参考多几篇文章来配置。tips:最好使用谷歌搜索

相关文章

  • oc Swift 混编

    oc Swift 混编 oc 项目 混编Swift1.1 oc 调用 Swift 的类 和 方法步骤: ...

  • OC和Swift混编一

    OC工程下混编 Swift工程下混编请查看OC和Swift混编二 1.建一个OC工程命名为OCTestSwift ...

  • OC和Swift混编二

    Swift工程下混编 OC工程下混编请查看OC和Swift混编一 1.建一个Swift工程命名为SwiftTest...

  • Swift(总)

    Swift目录如下: Objective-C和Swift混编指南-s混编-OC&Swift[https://www...

  • Swift

    混编 15、OC与Swift的混编_海森堡_lichangan的博客-CSDN博客_oc swift 混编[htt...

  • OC和Swift混编手动创建桥接文件及命名空间

    Obj-C混编Swift && Swift混编Obj-C Swift引用OC实现通过桥接头文件,OC引用Swift...

  • OC Swift文件混编

    一.Swift 类可以继承 OC 类,OC 类不能继承 Swift 类。 二.Swift 和 OC 混编 三.两个...

  • Swift 和 OC 混编之 framework

    Swift 和 OC 混编之 framework 在主工程为 Swift 的 framework 中引用 OC 代...

  • Swift和OC混编出现的桥接问题

    1.如果是自己的项目要进行Swift和OC混编 请参考 oc 和 swift混编之自建桥接文件 作者:水墨九 进行...

  • OC和Swift混编

    OC和Swift的混编,分为两种情况: OC项目中嵌入Swift文件 Swift项目中嵌入OC文件 先来看OC项目...

网友评论

    本文标题:Swift和OC混编

    本文链接:https://www.haomeiwen.com/subject/hjcurttx.html