混編分為兩種情況:
? ? ? ? 1.在Swift工程中使用Objective-C文件
????????2.在Objective-C工程中使用Swift的文件
Swift中訪問OC文件:
????????1.?添加橋接文件projectName-Bridging-Header.h
? ? ? ? ? ?橋接文件“ProjectName-Bridging-Header.h”锥忿,在首次創(chuàng)建其他文件的時候,會自動生成俯在。如果不小心刪除后成艘,也可以手動添加,不過名字必須是“ProjectName-Bridging-Header.h”頭文件(名稱組成:工程名-Bridging-Header.h)释牺。
? ? ? ? ? ?在Targets->Bulid Setting,然后搜索Swift侦副,選擇Swift Compiler-General下Objective-C Bridging Header,然后配置文件路徑豆村。
????????2.添加引用
? ? ? ? ? ? Swift中使用OC文件的時候只需要在橋接文件projectName-Bridging-Header.h中引入需要的頭文件。
????????????我們項目中對應的橋接文件為:X5mgc-Bridging-Header.h?
? ? ? ? ? ? ? ?這樣就可以在.Swift文件中訪問OC的類了脸秽,如下:
????注意點:
????????1儒老、使用第三方Framework
????????????設置:?target-->build?setting?-->Packaging?-->Defines?Module為?“Yes”;
????????????然后记餐,配置文件Target?->?Build?Phases?->?Link?Binary驮樊,添加要導入的Framework;
????????????最后片酝,還是要配置橋接文件巩剖,比如要使用?abc-lib.framework庫中的?abc.h?就要這樣配置:#import"abc-lib/abc.h";?
????????2、OC宏文件
????????????Swift中沒有宏钠怯,可以使用全局常量、全局函數(shù)代替部分宏問價
????????????Swift中是不能使用宏定義語法曙聂,但是因為命名空間的緣故晦炊,在其中,我們將原本oc中不需要接受參數(shù)的宏宁脊,定義成let常量或枚舉断国,將需要接受參數(shù)的宏定義成函數(shù)。
? ?OC中訪問Swift類:
? ? ? ? ? ? 1榆苞、首先我們創(chuàng)建一個OC項目稳衬,然后再OC項目中創(chuàng)建一個Swift類,如下:
? ? ? ? ? ? ? 如果你是第一次在工程中創(chuàng)建?Swift?類坐漏,工程會提示你是否需要創(chuàng)建?Objective-C?bridging?header薄疚,這個就是所謂的橋接文件。點擊?Create?Bridging?Header赊琳,此時會在你的工程中多出一個文件(文件命名規(guī)則是:工程名-Bridging-Header.h)
????????2街夭、在OC類中引用剛才創(chuàng)建的Swift類
????????????????在想要調用Swift代碼的類中導入Swift頭文件,這個是固定的寫法(規(guī)則是:工程名-Swift.h)躏筏,然后就可以調用我們剛才的?Swift?代碼了板丽。
注意點:
????????1、工程名-Swift.h這個文件雖然看不到趁尼,但是它是真是存在的埃碱,編譯后,你可以按住Command+單擊該文件名酥泞,就會看到具體生成的代碼砚殿。
????????2芝囤、對于需要混編的Swift類需要添加@objc聲明或者繼承NSObject或者是NSObject的子類瓮具。否則荧飞,引入 工程名-Swift.h之后,程序找不到對應類名党。
????????3叹阔、直接拖動對應的Swift文件到工程的話,好像直接拖動添加.swift文件到工程Xcode不會添加到編譯列表中传睹,因此要注意檢查拖動的文件是否添加到了build?phase的編譯列表中耳幢。
?????????4、OC項目混編Swift的時候欧啤,如果項目沒有自動生成橋接文件(ProductName-Bridging-Header.h)睛藻,那么你一定要自己創(chuàng)建并配置好路徑。因為:沒有橋接文件會影響到你的Swift轉OC接口文件(ProductName-Swift.h)中Swift要暴露給OC生成的接口邢隧。?
? ? ? ? ? 5店印、Swift中有許多OC沒有的特性,比如倒慧,Swift有元組按摘、泛型、定義的結構體纫谅、還有特有的枚舉類型炫贤。所以,要使用的混編文件要注意Swift獨有屬性問題付秕。