OC和Swift混編手動(dòng)創(chuàng)建橋接文件及命名空間

Obj-C混編Swift && Swift混編Obj-C


關(guān)注公眾號(hào)獲取更多
image

Swift引用OC實(shí)現(xiàn)通過橋接頭文件,OC引用Swift實(shí)現(xiàn)直接importProductModuleName-Swift.h

OC引用Swift或者Swift引用OC都需要將Defines Module選項(xiàng)設(shè)為YES

TARGETS ->Build Settings -> Packaging 中 設(shè)置Defines Module為YES

第一次在Swift創(chuàng)建OC文件,或者第一次OC創(chuàng)建Swift時(shí),xcode會(huì)提示橋接,Creat Bridging Header即可,這個(gè)文件用于Swift調(diào)用OC文件,與OC調(diào)用Swift無關(guān)。

image

手動(dòng)創(chuàng)建橋接文件

首先介紹下這兩個(gè)選項(xiàng)

product module name 產(chǎn)品模塊名稱

product name 產(chǎn)品名稱 Swift中的命名空間

路徑

Target->Build Settings->all->packaging
在默認(rèn)情況下,product module name和工程的Product Name一樣。

在OC中引入Swift或Swift中引入OC會(huì)自動(dòng)生成ProductModuleName-Bridging-Header.h的頭文件用于Swift訪問OC文件

如果修改的話切記要修改product name的話也要修改info.plist路徑Info.plist.File 命名空間要與其一致

在Obj-C中混編Swift

  • Defines Module 設(shè)置為YES
  • OC引用Swift Xcode自動(dòng)式實(shí)現(xiàn)的橋接文件命名方式是ProductModuleName-Swift.h
  • 直接在OC項(xiàng)目中,import ProductModuleName-Swift.h即可
  • 如果單純OC調(diào)用Swift以上即可,不需要倒入什么橋接文件。

在Swift中混編Obj-C

  • Defines Module 設(shè)置為YES
  • Xcode在Swift中新建OC會(huì)生成ProductModuleName-Bridging-Header.h
    //File > New > File > iOS > Source > Header File
  • 在ProductModuleName-Bridging-Header.h橋接文件中,直接import需要引用的OC文件即可。

說到product Name 這里說一下命名空間

OC中沒有命名空間這一說,都是使用類前綴(Class Prefix),當(dāng)作命名空間用區(qū)分名稱相同的文件,蘋果規(guī)定,兩字前綴蘋果擁有所有權(quán),三個(gè)字母的前綴為開發(fā)者使用。但是不沖突就沒事。例如AFNetWorking NSString MBProgressHUD ···

Swift中終于添加了命名空間,在任意類中打印一下self 會(huì)出現(xiàn)"命名空間.className"

注意。swift中的命名空間的使用不是一個(gè)項(xiàng)目,而是需要跨項(xiàng)目,在一個(gè)項(xiàng)目中,都是一個(gè)命名空間,在同一個(gè)命名空間下,所有全局變量或者函數(shù)共享,不需要import,從swift開始,官方更多的建議大家使用pod來管理第三方框架,不然倒入一個(gè)框架到處都可以用

swift獲取product Name

根據(jù)類名轉(zhuǎn)換成類的時(shí)候需要用到 product name + . + classStringName 也就是命名空間。

在這里需要說一下,OC Swift的命名空間的問題,別的語(yǔ)言都有命名空間這個(gè)概念唯獨(dú),OC Swift只有一個(gè)命名空間,就是它的Product Name

//這個(gè)key 在info.plist中source code打開即可看到。
//獲取命名空間
guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] else {
    print("獲取命名空間
    return
}
//根據(jù)類字符串轉(zhuǎn)換
guard let VcClass = NSClassFromString("\(nameSpace).\(vcName)") else {
    print("轉(zhuǎn)換失敗")
    return
}
//類型轉(zhuǎn)換
guard let viewController = VcClass as? UIViewController.Type else {
    print("類型轉(zhuǎn)換失敗")
    return
}

也可以創(chuàng)建一個(gè)Bundle的extension

extension Bundle {
    //使用計(jì)算屬性
    var spaceName: String {
//        return Bundle.main.infoDictionary?["CFBundleExecutable"] as? String ?? ""
        return infoDictionary?["CFBundleExecutable"] as? String ?? ""
    }
}

/**
guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] else {
    print("獲取命名空間
    return
}
*/
//上邊的獲取命名空間就可以寫成這個(gè)

guard let spaceNamee = Bundle.main.spaceName else {
    print("獲取失敗")
}


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

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

  • swift強(qiáng)勢(shì)來襲,想要緊跟腳步,但之前OC的工程推倒重來在時(shí)間和實(shí)踐上都有點(diǎn)傷神,混編就是這個(gè)過渡的橋梁,使...
    _skye閱讀 5,265評(píng)論 8 22
  • 橋接文件: 橋接文件時(shí)為了在swift中使用OC的內(nèi)容。當(dāng)在Swift工程中新建Objective-C文件或者在O...
    鞋底沒紋易摔跤閱讀 1,679評(píng)論 0 0
  • 前言: Swift語(yǔ)言出來后,可能新的項(xiàng)目直接使用Swift來開發(fā),但可能在過程中會(huì)遇到一些情況,某些已用OC寫好...
    瘋狂的電腦閱讀 2,314評(píng)論 0 9
  • 近況 最近由于公司業(yè)務(wù)上的需求,我們需要一個(gè)自己的編輯器來編寫我們得到APP里面的訂閱文章,為什么需要自己的編輯器...
    乖小鬼閱讀 5,291評(píng)論 11 16
  • 虎咬女爭(zhēng)取輿論受阻,看如何讓買手接受你的銷售訴求 2016年7月北京八達(dá)嶺野生動(dòng)物園東北虎園自駕游區(qū)發(fā)生了女游客下...
    withme118閱讀 133評(píng)論 0 0