1. 程式人生 > >小胖說swift04--------OC與Swift混編

小胖說swift04--------OC與Swift混編

小知識:

1.oc和swift只能互相傳類,不能互傳常量等非class的部分
2.Swift.h只能通過.m檔案引入,.h裡面要用swift的類需要申明@class

1.Swift呼叫OC

新建一個頭檔案,名為:OCContainerHeader.h

好了,以上的設定後就完全滿足了Swift使用OC寫的類了
在OCContainerHeader.h中呼叫OC的.h檔案:#import "FilrstOC.h",然後在swift檔案中使用點語法(FilrstOC.isBlankString("這是一個字串"))就可以呼叫方法了。

2.OC中呼叫Swift

OC要想使用,必須有標頭檔案。而swift檔案卻沒有標頭檔案,所在咱們想必也需要產生一個頭檔案。但對於OC呼叫swift  的標頭檔案比較特殊。因標頭檔案裡面的機制是自動生成的,在不熟悉的,不建議手寫。

哪如何產生這個標頭檔案。(注意,系統設定的標頭檔案,在工程中是看不到的。)

產生步驟:

選中targets->build settings ->packing->Product Module Name 中設定模組名,這個名稱很重要 swift 的標頭檔案就是根據這個來命名的。


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

這樣,工程中如查Swift要使用OC,則把需要使用的OC類的標頭檔案,全寫在MixDemo-Bridging-Header.h裡。同樣如果OC中所使用的swift類,只需要Clean一把,再編就可以了,但不要忘了匯入SwiftModule-swift.h哦(名稱自取,但-swift.h是固定的),另外還有一個需要讀者注意的。

注:

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

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