Swift和OC混編

有時(shí)候當(dāng)我們用到Swift寫的第三方庫時(shí),就不得不用到Swfit和OC混編。

舉個(gè)??,如果你想在你的工程里用到Charts…

首先,創(chuàng)建一個(gè)OC工程名為testSwift(Language選Objective-C即是)舉個(gè)例子,要在我的工程里面添加Charts這個(gè)第三方庫,戳這個(gè)github:

https://github.com/danielgindi/Charts

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

參考Usage,會(huì)發(fā)現(xiàn)如果你的工程的 Deployment Target (在PROJECT->Info->Deployment Target下)不是8.0以上(比如7.1),那么你就不能通過cocoa pods 導(dǎo)入這個(gè)第三方庫,而是要手動(dòng)拖入這個(gè)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可以執(zhí)行通過下面這句,就說明這個(gè)庫導(dǎo)入成功,你可以開始用Charts,

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

build一下,出現(xiàn)Use of unresolved identifier 'CGFloat'或者Use of unresolved identifier 'CGFloat'諸如此類問題, 由于這個(gè)Classes 文件全都是用swift語言寫的,而這里CGFloat是OC語言,要用到oc 和swift混編才行。

OC和Swift混編環(huán)境搭建

1.配置define modules為yes
點(diǎn)擊工程文件->TARGETS->BuildSettings->Packaging 將Defines Modules 設(shè)置為yes, Product Module Name設(shè)置為你的工程名

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

此時(shí),系統(tǒng)自動(dòng)生成 "工程名-Swift.h" 這個(gè)文件,只是它不顯示出來你看不見而已,先放著,這個(gè)文件千萬別手動(dòng)創(chuàng)建!!

2.創(chuàng)建bridging文件
方法1:手動(dòng)創(chuàng)建xxxx-Bridging-Header.h(這里xxxx是工程名)
新建一個(gè).h文件(File->New->File):

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

注意這里名字一定要命名為: 你的工程名-Bridging-Header 生成完長(zhǎng)這樣:

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

然后點(diǎn)擊工程文件->TARGETS->Build Settings->Swift Compolier - CodeGeneration 下配置Briging文件(注意!這里要寫的路徑,是直指.h文件)


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

為了讓你的工程在其他電腦也能運(yùn)行通過,這里要把路徑改成這樣:


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

方法二:在工程新建一個(gè)swift文件(選cocoa Touch Class, Subclass一定是NSObject!!語言選Swift)這個(gè)時(shí)候


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

選擇Create,這個(gè)時(shí)候工程里面就回自動(dòng)生成 工程名-Bridging-Header.h這個(gè)文件

這個(gè)時(shí)候Swift和OC混編的環(huán)境就基本配置完成了

那么上門的工程可以build通過嗎

----------------顯然還不行--------------

  1. 剛提到過我們Swift文件里面要用到 OC的 CGFloat, 要去 工程名-Bridging-Header.h 文件下import 這個(gè)CGFloat所在類的.h文件
屏幕快照 2016-05-11 下午12.13.01.png

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

2.還有,剛剛在ViewControrller.m下,我們調(diào)用了

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

這里是在OC里面使用Swift, 所以在這個(gè).m下要導(dǎo)入系統(tǒng)的頭文件:#import "工程名-Swift.h"(前面說過這個(gè)是系統(tǒng)自動(dòng)生成)


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

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

現(xiàn)在,再build 一下我們的工程,應(yīng)該是可以通過啦~
~~~~~~~~~~~~~~~ 一些小結(jié) ~~~~~~~~~~~~~~~
1.閱讀這個(gè)庫的api,首先要了解它的用法,這個(gè)庫要怎么導(dǎo)入,要怎么用
2.可以先自己創(chuàng)建一個(gè)簡(jiǎn)單的Demo先用一下這個(gè)庫,這樣的話出了問題也比較容易找到,當(dāng)小Demo可以build 起來,再試著按部就班地放到大的項(xiàng)目中。
3.關(guān)于OC和Swift混編的方法,網(wǎng)上的文章很多,魚龍混雜,可以看參考多幾篇文章來配置。tips:最好使用谷歌搜索

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 最近做了一個(gè)swift和oc的項(xiàng)目,他們之間互用根據(jù)以下資料調(diào)整很簡(jiǎn)單就可以搞定。 在混編的過程中最重要的兩個(gè)文件...
    f48ac133a97f閱讀 227評(píng)論 0 0
  • 簡(jiǎn)介:通過一個(gè)簡(jiǎn)單登錄SDK,介紹Swift和OC混編下如何打包和調(diào)用SDK github地址:https://g...
    老牛愛吃嫩草閱讀 5,804評(píng)論 8 5
  • 我們每個(gè)人都生活得不容易,有快樂之處自然也有無奈的地方。我們的青春實(shí)在是太短暫了,剛才想了下,初中到現(xiàn)在正好10年...
    奔跑的宣宣閱讀 588評(píng)論 0 2