一、引言
在ios的OC和Swift混合開(kāi)發(fā)無(wú)非是2種,一種是在OC的項(xiàng)目中使用Swift語(yǔ)言開(kāi)發(fā),這里就需要?jiǎng)?chuàng)建Swift文件(或者引用Swift寫(xiě)的的第三方庫(kù)),另一種是在Swift項(xiàng)目中使用OC語(yǔ)言開(kāi)發(fā),這里就需要?jiǎng)?chuàng)建OC文件,(或者引用OC寫(xiě)的的第三方庫(kù))
1、OC的Project使用Swift文件開(kāi)發(fā)
首先我們?cè)谝粋€(gè)已有的OC的項(xiàng)目中,創(chuàng)建一個(gè)Swift文件
這里Xcode就會(huì)自動(dòng)提示我們?nèi)纾簣D1

Would you like to configure an Objective-C bridging header?
Adding this file to ocProjectUseSwift will create a mixed Swift and Objective-C target. Would you like Xcode to automatically configure a bridging header to enable classes to be accessed by both languages?
提示我們創(chuàng)建一個(gè)橋接的頭文件,當(dāng)我點(diǎn)擊 “ Create? Bridging Header”,Xcode就給我們自動(dòng)創(chuàng)建,自動(dòng)創(chuàng)建的規(guī)則是:項(xiàng)目名+ "-Bridging-Header.h" 如圖2

同時(shí)在項(xiàng)目中創(chuàng)建一個(gè)Swift文件
然后在在 targets -> Build Settings -> Packaging 中設(shè)置Defines Module 為YES
設(shè)置完后開(kāi)始使用,怎么在oc中使用Swift的類(lèi)呢?
重點(diǎn): 在文件中引用 #import "ocProjectUseSwift-Swift.h"? 記住不是我創(chuàng)建的SecondVC.swift,是“項(xiàng)目名-Swift.h"文件名 ,引入這個(gè)文件就引入了所有的Swift文件內(nèi)的類(lèi)、方法、屬性
說(shuō)明:這個(gè)文件是系統(tǒng)自動(dòng)創(chuàng)建,自動(dòng)添加所有我們創(chuàng)建的Swift的類(lèi)的方法和屬性
前提是要在方法和屬性前面要加@objc 如圖3:

用@objc聲明好之后,在我們引用的是“項(xiàng)目名-Swift.h"文件名的?#import "ocProjectUseSwift-Swift.h" 內(nèi)就看到有標(biāo)記了如圖4

這里分了3塊,紅色和綠色標(biāo)記框內(nèi)是我們自己標(biāo)記的oc可用的屬性和方法,藍(lán)色框內(nèi)是系統(tǒng)自己生成的oc可以初始化方法
具體使用就在oc文件中,如圖5:

此事,在這個(gè)OC創(chuàng)建的項(xiàng)目中,我們創(chuàng)建的Swift文件怎么使用OC創(chuàng)建的類(lèi)呢?
這里就用到我們創(chuàng)建的橋接頭文件了,在圖2中的橋接頭文件,引入OC的頭文件,如圖6

就這樣很簡(jiǎn)單,所以Swift文件的類(lèi)都可以使用這個(gè)OC文件內(nèi)的類(lèi)了,使用起,和OC調(diào)用OC的類(lèi)一樣,如如圖7和圖8


2、Swift的Project使用OC文件開(kāi)發(fā)
Swift的項(xiàng)目中,第一次創(chuàng)建OC的文件,此時(shí)系統(tǒng)會(huì)自動(dòng)幫我們創(chuàng)建橋接頭文件,如圖9

然后就有了和圖2一樣的橋接頭文件,剩下的就和圖6一樣,在橋接頭文件內(nèi)引入頭文件,即可使用OC的類(lèi),第三方庫(kù)如果也是OC寫(xiě)的,在引入的時(shí)候也自動(dòng)會(huì)加這個(gè)橋接頭文件,當(dāng)然一個(gè)項(xiàng)目只能加一次,加過(guò)的就不需要加了