iOS-OC和Swift相互混合開(kāi)發(fā)(OC&Swift混編)

一、引言

在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

圖1

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

圖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:

圖3

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

圖4

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

具體使用就在oc文件中,如圖5:

圖5

此事,在這個(gè)OC創(chuàng)建的項(xiàng)目中,我們創(chuàng)建的Swift文件怎么使用OC創(chuàng)建的類(lèi)呢?

這里就用到我們創(chuàng)建的橋接頭文件了,在圖2中的橋接頭文件,引入OC的頭文件,如圖6

圖6

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


圖7


圖8

2、Swift的Project使用OC文件開(kāi)發(fā)

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

圖9

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容