OC與Swift混編之橋接文件

前言

點(diǎn)擊簡書寫文章的時候發(fā)現(xiàn)還有幾篇文章只寫了標(biāo)題,內(nèi)容還沒有寫。所以現(xiàn)在趁著午休時間,把這篇文章完善一下。看到這個標(biāo)題,大家伙可能會認(rèn)為我太out了,Swift都出來4年了,類似的文章數(shù)不勝數(shù),還有什么可寫的。對此我只想說:是的,的確是這樣??。但是本篇介紹的還是有其獨(dú)特的亮點(diǎn),這些亮點(diǎn)可以讓你對橋接文件產(chǎn)生更充分的認(rèn)識

  • 亮點(diǎn)一:對于Xcode提示建立橋接文件時,誤點(diǎn)cancel后的處理方法
  • 亮點(diǎn)二:SDK開發(fā)的時候,OC與Swift混編橋接文件的建立技巧

這里先介紹普通工程下,Swift與OC混編時橋接文件的建立方法

一、Swift項目混編OC

建立Swift-OC橋接文件(在Swift類中引用OC類及方法)

  1. 如圖,新建project,language選擇Swift。
    圖1:新建Swift工程
  2. 在Swift工程主目錄下新建一個OC類,如果是項目第一次創(chuàng)建OC類的話,會彈出如圖的提示窗。這個提示窗就是是否建立Swift-OC的橋接文件的彈窗提示。
    圖2:建立Swift-OC橋接文件提示窗
  3. 點(diǎn)擊Create Bridging Header,Xcode會自動創(chuàng)建一個頭文件。這個頭文件,就是Swift-OC的橋接文件,如下圖所示:
    圖三:Swift-OC橋接文件
  4. Swift-OC橋接文件里將OC類進(jìn)行聲明(聲明的時候不會任何系統(tǒng)提示,需要全手寫)如圖:
    圖四:聲明OC類

    此時在Swift與OC根據(jù)Swift-OC橋接文件,就建立了交接關(guān)系,在Swift類中就可以調(diào)用OC類里的方法了。
  5. 在OC類隨便實現(xiàn)一個自定義實例方法。在Swift類中調(diào)用OC的這個方法。如圖:
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let ocView = XLLOCView.init()
        let count = ocView.getConstCount()
        print(count)
    }

亮點(diǎn)一:在彈出建立橋接文件提示的時候,誤點(diǎn)了cancel怎么破

  • 新建一個header文件,如果點(diǎn)擊next設(shè)置header文件名為SwiftOC-Header
  • 在項目target下的build setting -> Swift Compiler-General ->Objective-C Bridging Header將上面建立文件的目錄設(shè)置上去。我的Demo頭文件目錄為XLLSwiftOCMaxTest/SwiftOC-Header.h。如圖
    圖五:設(shè)置Swift-OC橋接文件路徑
  • 此時再在Swift類中調(diào)用OC方法,發(fā)現(xiàn)一樣好使。

其實系統(tǒng)提示情況下建立的Swift-OC橋接文件,在build setting->Objective-C Bridging Heade中,Xcode默認(rèn)將路徑已經(jīng)設(shè)置了。所以根據(jù)提示建立的橋接文件,這個地方就不需要再進(jìn)行手動設(shè)置

OC-Swift橋接文件(OC類引用Swift類及方法)

在Swift的項目里,并不會有提示讓你去建立OC-Swift橋接文件。那么我們怎樣在OC類中去調(diào)用Swift呢?請看圖六,在Objective-C Bridging Header下面的一行Objective-C Generated Interface Header Name,這個就是OC-Swift橋接文件聲明的地方。可以看到其命名為XLLSwiftOCMaxTest-Swift.h

  1. 在Swift類實現(xiàn)一個實例方法
import UIKit

class XLLSwiftView: UIView {

    @objc func getSwiftConstCount() -> NSString? {
        
        return "5"
    }
}
  1. 在OC類中聲明OC-Swift橋接文件,并調(diào)用Swift類的實例方法。
#import "XLLOCView.h"
#import "XLLSwiftOCMaxTest-Swift.h"

@implementation XLLOCView

- (instancetype)init
{
    if (self = [super init])
    {
        XLLSwiftView *swiftView = [[XLLSwiftView alloc] init];
        NSString *count = [swiftView getSwiftConstCount];
        NSLog(@"%@", count);
    }
    return self;
}

二、OC項目混編Swift

  • 其實與Swift混編OC原理一樣,第一次新建Swift類的時候,會彈出建立OC-Swift橋接文件的提示,點(diǎn)擊create即可。如果沒有誤點(diǎn)了取消。去設(shè)置項目target下的build setting -> Swift Compiler-General -> Objective-C Generated Interface Header Name。雙擊鍵入$(SWIFT_MODULE_NAME)-Swift.h,然后在OC調(diào)用Swift方法的類中聲明#import "項目名稱-Swift.h"即可。
  • 對于Swift-OC的橋接文件,需要手動建立。方法與Swift項目中手動創(chuàng)建Swift-OC橋接文件一樣。

三、SDK項目下的混編

目前遇到的是在framework工程下,OC與Swift混編,OC類調(diào)用Swift方法的情況。

  • 在framework工程下,混編不會提示任何創(chuàng)建橋接文件的提示。如果OC類需要調(diào)用Swift類的方法,需要在OC類這樣聲明橋接文件:#import "工程名/工程名-Swift.h"
  • 而設(shè)置Swift-OC橋接文件路徑Objective-C Bridging Header,編譯之后會報如下錯誤:


    SDK工程設(shè)置Swift-OC橋接文件路徑報錯

    如上錯誤,顯然說framework是不支持設(shè)置此類橋接文件的(這就尷尬了)。因為項目需要沒有涉及到此操作,所以這個問題也沒細(xì)細(xì)研究,有時間的小伙伴可以鉆研一下。

后語

匆匆忙忙寫的,還有好多點(diǎn)沒有講到。后期會慢慢完善優(yōu)化。看到的小伙伴望體諒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評論 2 374

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

  • 前言: Swift語言出來后,可能新的項目直接使用Swift來開發(fā),但可能在過程中會遇到一些情況,某些已用OC寫好...
    瘋狂的電腦閱讀 2,314評論 0 9
  • Obj-C混編Swift && Swift混編Obj-C Swift引用OC實現(xiàn)通過橋接頭文件,OC引用Swift...
    阿杰的人生路閱讀 6,644評論 0 7
  • swift強(qiáng)勢來襲,想要緊跟腳步,但之前OC的工程推倒重來在時間和實踐上都有點(diǎn)傷神,混編就是這個過渡的橋梁,使...
    _skye閱讀 5,265評論 8 22
  • iOS開發(fā)中有時候不可避免的會使用到OC和Swift的混編,這時候就需要建立橋接文件連接不同語言的類庫 最近項目中...
    丶Destinyxl閱讀 15,774評論 16 27
  • 風(fēng)吹起了蟄伏的發(fā)梢露出了眼角那一點(diǎn)痣陽光將影子拉得修長你的笑,我經(jīng)年不忘 一生短短長長相逢自思量世間多美好,唯你,...
    王大蝦蝦蝦閱讀 483評論 0 2