天天看點

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

Apple于2014年6月推出了名為“Swift”的新母語,用于為iPhone、iPod、Apple Watch和其他蘋果裝置建立應用程式。Apple承諾它比Objective-C更快更簡單。在本文中,我們将讨論如何将用Objective-C語言編寫的舊版iOS應用程式轉換為Swift,而無需從頭開始重寫所有代碼。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

第1步:建立Swift檔案

第一步很簡單,就像在Objective-C應用程式中建立Swift檔案一樣簡單。要建立Swift檔案,請轉到Xcode中的New File菜單,然後選擇iOS source,然後從iOS Source菜單中選擇Swift檔案。點選下一步按鈕。寫下檔案名,然後單擊“建立”按鈕。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

現在您将看到Xcode中彈出橋接标題,Xcode自動建立一個名為“bridging header”的檔案和背景的另一個檔案。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

bridging header檔案允許您的項目與Objective-C類和Swift類進行通信。是以,項目配置為在混合模式下工作,其中代碼可以作為Objective-C檔案或Swift檔案存在。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

第2步:将所有頭檔案導入橋接檔案

在設定了橋接檔案之後,我們将把我們想要在Swift中使用的Objective C類中的所有項目頭檔案移動到這個橋接檔案中。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

這個橋接檔案允許我們在Swift類中建立Objective-C對象。在這個階段,我們可以在Swift中建立Objective-C類的對象,但是,如果我們嘗試在Objective-C類中建立Swift類對象,它将顯示錯誤。為什麼?

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

橋接檔案允許将Objective-C類導入到Swift類中,但不允許在Objective-C類中建立Swift類對象。要解決這個問題,我們将需要在步驟1中建立Swift檔案時由Xcode生成的背景檔案。我們需要将隐藏的(Xcode生成的背景檔案)Swift檔案導入到Objective-C類中以在Objective中建立Swift對象-C。該檔案的名稱将使用以下命名模式:“NameOfTheProject-swift.h”。在示例中,我的項目名稱是“Guilder”,是以Xcode生成的檔案名是“Guilder-swift.h”,看下面給出的截圖。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

讓我們總結一下這三步過程:

  1. 在Objective C應用程式中建立Swift檔案時,需要單擊“接受”以建立橋接檔案。
  2. 将所需的Objective-C頭檔案放入您建立的橋接檔案中,以便在Swift中通路這些類。
  3. 在要通路Objective-C類的Swift類中,您将導入隐藏的Xcode生成的檔案。
xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

有時項目的源代碼很多,需要花費大量時間将Objective-C中編寫的每個檔案更改為Swift,進而使從頭開始重寫整個項目變得更加容易。在這種情況下,您可以使用線上轉換工具轉換Objective-C Swift,例如Swiftify。使用這些工具轉換應用程式後,您可能仍會看到一些錯誤和文法錯誤,例如:

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象
  1. 變量的雙重定義。
  2. 錯誤的可選和功能簽名
  3. Swift版本問題
  4. Xcode建議修複
  5. 空值檢查

但是,這些問題可以解決,工具可以節省大量的時間和人力。例如,要解決變量問題的雙重定義,您需要删除重複的聲明。另一個例子是如何解決選項問題,使用if..else或let guard語句,而不是解包變量,這是因為展開容易出錯。

xcode12.3 swift 橋接檔案_将Objective-C iOS應用程式轉換為Swift的指南第1步:建立Swift檔案第2步:将所有頭檔案導入橋接檔案第3步:在Xcode中導入背景Swift FileGenerated 以允許Objective-C中的Swift對象

總而言之,橋接機制以及由XCode生成的隐藏Swift檔案為Objective-C和Swift類提供了一種互相通信并消耗彼此服務的方法。是以,我們可以在Swift中建立包裝類,并使用Objective-C類來提供相同的功能而無需重寫任何内容。