Swift與OC混編

swift 語言出來后,可能新的項目直接使用swift來開發,但可能在過程中會遇到一些情況,某些已用OC寫好的類或封裝好的模塊,不想再在swift 中再寫一次,哪就使用混編。這個在IOS8中是允許的。

混編分為兩種:swift項目中混編OC和OC項目中混編swift

一、swift項目中混編OC

1.新建一個Swift工程:我這里工程名為MixDemo

建好后工程:

首先Swift中不再使用頭文件和.m文件的方式了。所以也不需要使用import ""來導入頭文件。哪swift 如何能訪問到OC的類聲明的。

其實,swift也是需要使用頭文件進行訪問的,只不過不再需要使用顯式的方式使用import進行導入。有兩種方式來實現這個頭文件的生成。

方式一:在一個全新的Swift,利用第一次新建提示的方式自動添加橋接頭文件。

點確定這后就會生成一個頭文件。

方式二:

新建一個頭文件,名為:OCContainerHeader.h

在targets->build settings ->Object-C Bridging Header 設為哪個橋接的頭文件即可。

通過兩種任意方式創建好橋接文件把想要在swift類中調用的OC頭文件使用#import "" 寫到這個橋接文件中,就可以在swift中直接調用了


二、OC項目中混編swift

OC要想使用,必須有頭文件。而swift文件卻沒有頭文件,所在咱們想必也需要產生一個頭文件。但對于OC調用swift? 的頭文件比較特殊。因頭文件里面的機制是自動生成的,在不熟悉的,不建議手寫。哪如何產生這個頭文件。(注意,系統設置的頭文件,在工程中是看不到的。

產生步驟:

選中targets->build settings ->packing->Product Module Name 中設置模塊名,這個名稱很重要 swift 的頭文件就是根據這個來命名的。

雖然你看圖中有這個import "SwiftModule-swift.h"但你在整個工程中是找不到這個文件的,但可以使用CMD+ 鼠標點擊可看這個頭文件中的內容。

注:

凡是用Swift寫的類,如果不繼成自NSObject或NSObject 的派生類,哪么編譯后將不會生成對應的轉換類。從而使得OC 中找不到相應的聲明。

如我的例子中 class Act 這樣不會被編譯到SwiftModule-swift.h中,但寫為 class Act : NSObject,就可以編譯出相應的聲明。另外可以使用@objc加以聲明,但這個還是一樣,類最好繼承NSObject下來。就像下面:

但是在使用時你就會發現

act = [[Act alloc]init]; //報錯,找不到alloc,因此建議大家還是繼承NSObject.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言: Swift語言出來后,可能新的項目直接使用Swift來開發,但可能在過程中會遇到一些情況,某些已用OC寫好...
    瘋狂的電腦閱讀 2,318評論 0 9
  • 概述 利用runtime特性實現iOS項目的組件化開發,是由@casatwy大神提出來的,在他的博客中具體介紹...
    Mr杰杰閱讀 1,626評論 2 9
  • 1、創建一個Swift或者是OC的工程 下面以Swift工程舉例,OC工程操作是一樣的 創建好的時候自動生成我們熟...
    LHsunshine閱讀 435評論 0 1
  • Swift 已推出數年,與Objective-C相比Swift的語言機制及使用簡易程度上更接地氣,也大大降低了iO...
    shuigenObba閱讀 450評論 0 0
  • 蘇妲己見著那人是在淮北的仲秋夜上,那人衣服是上好的綢緞,發冠上鑲嵌著昂貴的寶玉。她其實也奇怪像他那般衣著的人為何回...
    千般盡意閱讀 606評論 0 13