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

第1步:建立Swift檔案
第一步很簡單,就像在Objective-C應用程式中建立Swift檔案一樣簡單。要建立Swift檔案,請轉到Xcode中的New File菜單,然後選擇iOS source,然後從iOS Source菜單中選擇Swift檔案。點選下一步按鈕。寫下檔案名,然後單擊“建立”按鈕。
現在您将看到Xcode中彈出橋接标題,Xcode自動建立一個名為“bridging header”的檔案和背景的另一個檔案。
bridging header檔案允許您的項目與Objective-C類和Swift類進行通信。是以,項目配置為在混合模式下工作,其中代碼可以作為Objective-C檔案或Swift檔案存在。
第2步:将所有頭檔案導入橋接檔案
在設定了橋接檔案之後,我們将把我們想要在Swift中使用的Objective C類中的所有項目頭檔案移動到這個橋接檔案中。
這個橋接檔案允許我們在Swift類中建立Objective-C對象。在這個階段,我們可以在Swift中建立Objective-C類的對象,但是,如果我們嘗試在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”,看下面給出的截圖。
讓我們總結一下這三步過程:
- 在Objective C應用程式中建立Swift檔案時,需要單擊“接受”以建立橋接檔案。
- 将所需的Objective-C頭檔案放入您建立的橋接檔案中,以便在Swift中通路這些類。
- 在要通路Objective-C類的Swift類中,您将導入隐藏的Xcode生成的檔案。
有時項目的源代碼很多,需要花費大量時間将Objective-C中編寫的每個檔案更改為Swift,進而使從頭開始重寫整個項目變得更加容易。在這種情況下,您可以使用線上轉換工具轉換Objective-C Swift,例如Swiftify。使用這些工具轉換應用程式後,您可能仍會看到一些錯誤和文法錯誤,例如:
- 變量的雙重定義。
- 錯誤的可選和功能簽名
- Swift版本問題
- Xcode建議修複
- 空值檢查
但是,這些問題可以解決,工具可以節省大量的時間和人力。例如,要解決變量問題的雙重定義,您需要删除重複的聲明。另一個例子是如何解決選項問題,使用if..else或let guard語句,而不是解包變量,這是因為展開容易出錯。
總而言之,橋接機制以及由XCode生成的隐藏Swift檔案為Objective-C和Swift類提供了一種互相通信并消耗彼此服務的方法。是以,我們可以在Swift中建立包裝類,并使用Objective-C類來提供相同的功能而無需重寫任何内容。