在iOS 開發中,由於蘋果14年發佈了Swift語言,具備簡單實用、高效等諸多優點,越來越受開發者青睞。另外,由於Objective-C多年發展和穩定性,有很多框架(特別是商業SDK)採用Objective-C,或者之前的老項目使用Swift語言。都需要涉及到混編,纔可以實現文件相互識別與引用。
Swift中使用Objective-C
重點文件:橋接文件
如果創建項目選擇的是Swfit, 如果要使用Objective-C的框架(實際項目中一定會遇到)或者文件,就需要創建橋接文件xxx-Bridging-Header.h,然後將Objective-C引入。一般你創建一個.h文件,Xcode會自定詢問你是否創建橋接文件。
Swift中需要使用到的Objective-C都需要在橋接文件中引入。這樣swift調用的時候纔可以識別到。
Objective-C中使用Swift
重點文件:Swfit頭文件(一下簡稱Swift.h)
創建項目基於Objective-C,如果要使用Swfit文件,在編譯的時候會自動爲Swift文件生成一個"項目名-Swift.h"的頭文件,裏面包含了所有Swift文件的Objective-C方式聲明。
"XXX-Swift.h"文件找不到錯誤
在開發中有可能會遇到“xxx-Swift.h File not found”的編譯錯誤,有如下修復方式
1. 項目名引起
檢查項目名是否含有空格或連接符,如果有,需要引入的swift.h文件名字,比如下面的
My Project 文件名應該是My_Project-Swfit.h
My-Project 文件名應該是My_Project-Swfit.h
如下圖:
看到有人說需要將build setting Packaging 下的defines Module 設置爲Yes, 我不知道有沒有用,反正我是沒有設置都可以。
2. 循環引起
描述一下我遇到這個問題的情況,我們定義了一個pch文件用來引入所有需要用到的Objective-C頭文件,最後一行也引入了Swift.h文件,(這樣的想法是Objective-C使用Swfit的時候不需要再引入)。 最後我們在橋接文件中引入pch文件。最後發生着Swift.h文件找不到。
在閱讀了這個大哥【Objective-C與Swift混編】的文章後,豁然開朗。
混編編譯順序
當 Objective-C 與 Swift 進行混編時,編譯的過程(Pipeline)是:
- 首先編譯 Swift Module。預編譯 Bridging Header 後,再編譯 Swift 源文件。
- Swift 編譯完成後,生成 ProjectName-Swift.h 的頭文件供 Objective-C 使用。
- 最後編譯 Objective-C 源文件。