OC與Swift混編

? ? swift強(qiáng)勢(shì)來(lái)襲,想要緊跟腳步,但之前OC的工程推倒重來(lái)在時(shí)間和實(shí)踐上都有點(diǎn)傷神,混編就是這個(gè)過(guò)渡的橋梁,使用混編,快速完成

在OC工程中首次創(chuàng)建swift文件或者swift中首次創(chuàng)建OC文件,都會(huì)給出提示是否自動(dòng)生成一個(gè)橋接文件,其實(shí)自動(dòng)生成是兩個(gè)文件,一個(gè)可見(jiàn)一個(gè)不可見(jiàn),但是這兩個(gè)文件的名稱都能在配置文件中找到,在使用之前先看個(gè)小實(shí)驗(yàn)......

1.使用前需要了解的配置

做個(gè)小實(shí)驗(yàn)(只用靜靜看著就好了):

1).target-->buildSetting--(輸入packaging)

a.前提條件:工程名字是TimingUsingPickerView

b.Product Module Name 設(shè)置成 "imooc"

c.Product Name設(shè)置成"imooc1"

d.Defines Module 系統(tǒng)默認(rèn)是No,此處還是用系統(tǒng)默認(rèn)的 ? ?(這個(gè)是經(jīng)過(guò)嘗試,設(shè)置成Yes 或者No在我目前使用的范圍內(nèi)并沒(méi)有什么影響,當(dāng)然個(gè)人涉及范圍有限,可能有什么未知的影響還沒(méi)觸及,感興趣可以嘗試,歡迎補(bǔ)充~_~)

配置如下:

實(shí)驗(yàn)配置如圖

2)在OC中創(chuàng)建swift文件 生成橋接文件和隱藏文件:

? ? target-->buildSetting--(輸入swift)

查看文件名

如圖,可以看到生成的文件名:

a.橋接文件" TimingUsingPickerView-Bridging-Header.h" 可見(jiàn)的,在工程中可查找到該文件(在swift調(diào)用OC文件)

b.imooc-Swift.h不可見(jiàn),但調(diào)用時(shí)可像查看系統(tǒng)類(lèi)的方法查看(在OC中調(diào)用swift文件)


經(jīng)實(shí)驗(yàn)發(fā)現(xiàn):

a.無(wú)論怎么改變,橋接文件的名字都是跟工程名保持一致.但是該文件是可以單獨(dú)創(chuàng)建,進(jìn)行配置的.具體操作步驟:創(chuàng)建一個(gè)頭文件,然后模仿"工程名-Bridging-Header.h"的形式命名,再查找target-->buildSetting--(輸入swift),在Bridging Header中進(jìn)行設(shè)置(一般還是建議使用系統(tǒng)自己創(chuàng)建)

b.生成的不可見(jiàn)文件imooc-Swift.h名字是受Product Module Name影響的.該文件不建議自己創(chuàng)建,所以需要自定義的一定在使用之前先設(shè)置好Product Module Name.


2.OC與swift文件的真正混用

實(shí)驗(yàn)條件可以忽略,但是為了避免不必要的麻煩,建議看了實(shí)驗(yàn)結(jié)果再往下走:

1)target-->buildSetting--(輸入packaging)-->設(shè)置Product Module Name (也可不設(shè)置,默認(rèn)是系統(tǒng)的)


moduleName


2)在OC中首次創(chuàng)建swift或者在swift中首次創(chuàng)建OC,彈出提示,是否創(chuàng)建橋接文件

提示是否創(chuàng)建橋接文件

點(diǎn)擊確定,則會(huì)生成兩個(gè)文件:

TimingUsingPickerView-Bridging-Header.h 以工程名命名的橋接文件,可見(jiàn)

imooc-Swift.h 不可見(jiàn),在target-->buildSetting--(輸入swift)進(jìn)行查看


3)swift與OC的混用

? a.在swift中使用OC的文件

在自動(dòng)創(chuàng)建的橋接文件TimingUsingPickerView-Bridging-Header.h中,依次導(dǎo)入swift文件中需要使用的類(lèi),然后就可以使用了,不過(guò)在swift文件中得按swift的規(guī)則寫(xiě)了

導(dǎo)入需要的OC文件


?b.在OC中使用swift的文件

在OC中導(dǎo)入系統(tǒng)自動(dòng)生成的imooc-swift.h文件(不能直接查找到該文件,但是可以像查看系統(tǒng)類(lèi)的方法點(diǎn)擊進(jìn)入查看) ,就可以使用創(chuàng)建的swift文件,"...-swift.h"/"...-Swift.h"都可以

導(dǎo)入系統(tǒng)創(chuàng)建的文件


3.swift調(diào)用OC中的一些坑

OC 中宏定義 如果只是值類(lèi)型等簡(jiǎn)單的宏定義,swift也可直接調(diào)用,但是如果是比較復(fù)雜的方法,swift就只能呵呵了,這個(gè)時(shí)間建議創(chuàng)建方法可以使用swift中的延展extension

1)swift中簡(jiǎn)單宏使用如:

OC中簡(jiǎn)單宏定義
swift中調(diào)用簡(jiǎn)單宏


2)swift中不能使用OC中復(fù)雜的宏如:

OC中復(fù)雜的宏

當(dāng)不能使用的時(shí)候,就需要寫(xiě)成方法供swift使用,可以創(chuàng)建一個(gè)swift文件,然后添加需要的延展,如下圖:

UIColor的延展
swift方法中方法的調(diào)用


3)創(chuàng)建的swift類(lèi),必須繼承自NSObject或者NSObject的派生類(lèi),否則編譯后不會(huì)生成對(duì)應(yīng)的轉(zhuǎn)換類(lèi),接下來(lái)驗(yàn)證一下(此處感謝 ?@小杰杰杰提示??)

a.首先創(chuàng)建一個(gè)Person類(lèi),不繼承NSObject

未繼承NSObject的Person類(lèi)


在OC中TestViewController.m中使用,記得引入"工程名-swift.h",出現(xiàn)如下圖的提示,此處按住"command"鍵,點(diǎn)擊Person,進(jìn)入到剛剛創(chuàng)建的Person類(lèi)(見(jiàn)上圖)

OC中使用未繼承NSObject的Person類(lèi)(swift編寫(xiě))


b.現(xiàn)在修改原來(lái)的Person類(lèi),繼承NSObject,如下圖,修改后要"command+B"編譯一下才能看到變化

繼承NSObject的Person類(lèi)


同樣在OC中TestViewController.m中使用,記得引入"工程名-swift.h",未報(bào)錯(cuò),如下圖:

OC中使用繼承NSObject的Person類(lèi)(swift編寫(xiě))


此時(shí),按住"command",點(diǎn)擊Person進(jìn)入,此處有驚喜,如下圖:

swift編寫(xiě)的Person類(lèi)對(duì)應(yīng)的轉(zhuǎn)換類(lèi).可以互相調(diào)用,玄機(jī)就在這里??

4)創(chuàng)建的swift類(lèi)中,寫(xiě)了一個(gè)枚舉,不繼承NSObject,此時(shí)定義一個(gè)該枚舉類(lèi)型的變量,發(fā)現(xiàn)橋接文件中沒(méi)有生成相應(yīng)的屬性,解決辦法:定義枚舉時(shí)需要手動(dòng)添加添加@objc,如下:

swift中定義枚舉類(lèi)型的變量


看來(lái)使用OC與swift混編還是有點(diǎn)限制的,使用時(shí)需謹(jǐn)慎,不過(guò),這些也已經(jīng)夠平時(shí)使用了


小結(jié):swift和OC混用,坑還是很多的,埋坑是個(gè)體力活,常運(yùn)動(dòng)是個(gè)好習(xí)慣...

以上僅是個(gè)人使用總結(jié),歡迎批評(píng)指正補(bǔ)充~~~~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末暖璧,一起剝皮案震驚了整個(gè)濱河市捂掰,隨后出現(xiàn)的幾起案子寺擂,更是在濱河造成了極大的恐慌匾浪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件准颓,死亡現(xiàn)場(chǎng)離奇詭異食磕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)戚哎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嫂用,“玉大人型凳,你說(shuō)我怎么就攤上這事∈郏” “怎么了啰脚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵殷蛇,是天一觀的道長(zhǎng)实夹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)粒梦,這世上最難降的妖魔是什么亮航? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮匀们,結(jié)果婚禮上缴淋,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好重抖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布露氮。 她就那樣靜靜地躺著,像睡著了一般钟沛。 火紅的嫁衣襯著肌膚如雪畔规。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天恨统,我揣著相機(jī)與錄音叁扫,去河邊找鬼。 笑死畜埋,一個(gè)胖子當(dāng)著我的面吹牛莫绣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悠鞍,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼对室,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咖祭?” 一聲冷哼從身側(cè)響起软驰,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎心肪,沒(méi)想到半個(gè)月后锭亏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硬鞍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年慧瘤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片固该。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锅减,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伐坏,到底是詐尸還是另有隱情怔匣,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布桦沉,位于F島的核電站每瞒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纯露。R本人自食惡果不足惜剿骨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埠褪。 院中可真熱鬧浓利,春花似錦挤庇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苹威,卻和暖如春淘菩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屠升。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工潮改, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腹暖。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓汇在,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脏答。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糕殉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • OC中使用Swift 1、在項(xiàng)目中右鍵添加一個(gè) Swift 文件殖告,如TestSwift.swift阿蝶。 2、添加后 ...
    刺客辣條閱讀 2,262評(píng)論 3 11
  • OC與swift混編 前言 蘋(píng)果推出swift已經(jīng)兩年多了黄绩,到今年的九月份正式發(fā)布了swift的3.0版本羡洁,相信很...
    wentianen閱讀 736評(píng)論 0 5
  • iOS開(kāi)發(fā)中有時(shí)候不可避免的會(huì)使用到OC和Swift的混編,這時(shí)候就需要建立橋接文件連接不同語(yǔ)言的類(lèi)庫(kù) 最近項(xiàng)目中...
    丶Destinyxl閱讀 15,695評(píng)論 16 27
  • 終于知道自己的拖延癥有多嚴(yán)重了爽丹,不到最后的關(guān)鍵時(shí)刻總是會(huì)像寒號(hào)鳥(niǎo)一般…不想當(dāng)廚師的將軍不是好士兵筑煮!我的斜杠人生拉開(kāi)...
    卿秀閱讀 415評(píng)論 1 5
  • 喜歡大雨的肆無(wú)忌憚, 人性也需要來(lái)一次痛快淋漓的滌蕩粤蝎! 讓暴風(fēng)雨來(lái)的更猛烈些吧真仲, 我們這一代!
    知未了閱讀 259評(píng)論 0 3