Swift 與 Objective-C混編xxx-Swift.h File not found

 

在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 源文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章