在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
如下圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLx0kaOdXSU9EMFpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5QjNzUDO0QTM4EjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
看到有人說需要将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 源檔案。