77-Swift之Pch文件與宏定義

引言

在OC的開發中,Pch (Prefix-Compiled Header) 是一個標準的預編譯頭文件。在Pch 中定義的內容(宏、方法、函數等)我們都可以在工程中直接引用。但是,在Xcode6的時候,蘋果移除工程自動創建Pch文件。因此,我們相使用 Pch文件的話需要我們手動創建和添加。

Swift 中的 'Pch'

在Swift 中的 'Pch'是由 Swift File 選項創建的文件,該文件的后綴是 .swift 。該文件創建后不需要任何配置就可以使用定義的常量和函數等。但是 Swift 中也可以添加 Pch文件,不過的是改 Pch 是OC范圍的,如果要使用其定義的宏和函數,那必須使用 Swift 調用OC的橋接。

Swift 中的 Swift File 文件的創建和使用

說明:Swift File 創建的文件是以 .swift 后綴結尾的,不需要任何配置,就可以使用其中的常量和函數等。

1> 第一步:創建工程并點擊一個控制器,然后鼠標左鍵選擇[New File...] 選項,如下圖所示:

933D2BE6-8236-40B4-9DDF-84C6B9B81F63.png

2> 按照第一步進行會進入下面模塊的選擇,然后選擇 [Swift File] 模塊。如下圖所示:

89E01785-D88F-4726-B315-AA6BA27DA641.png

3> 經過第二步,我們點擊 Next 后,進入文件命名的界面,然后給文件命名為 SwiftHeader ,如下圖所示:

588E942F-8DB5-49EB-B231-E4C638658FEA.png

4> 經過第三步,然后我們點擊 Create 后,在工程中得到我們創建的Swift File文件 SwiftHeader.swift。如下圖所示:

C4B012E4-1A12-4862-95BB-B10AE82BFC7B.png

5> 我們在創建的 SwiftHeader.swift文件中創建常量和函數如下圖所示:

9F2B163D-06EB-469A-ADDC-8C3F5625C3FD.png

6> 我們對我們創建SwiftHeader.swift中的常量和函數的測驗,如下圖所示:

E2C78838-24B7-4C25-A0C7-21F4754B6E20.png

7>對Swift 項目使用 Swift File文件的總結

經過第六步的測試,我們可以在工程的全局調用SwiftHeader.swift中的常量、函數、回調等。

Swift 中的Pch文件的創建和使用

1、在工程中選擇一個控制器,然后鼠標左鍵選擇 New File...選項,然后進入模塊選擇區,我們將區域滾動到 other區域,我們就可以看到一個 PCH File的紅色文件,如下圖所示:

D0747532-FA33-43E8-A6AF-026E27820195.png

2、經過第一步,我們點擊 Next,進入下一步,給文件的命名,我們命名為PrefixHeader ,如圖下圖所示:

7110DC54-4CBD-4D2F-BAB4-D872AF79D512.png

3、我們點擊 Create 后,在工程里面我們就可以看到我們創建的 PrefixHeader.pch文件。如下圖所示:

C389CC40-CD2E-481F-9301-6B92831F1CFD.png

4、我們在創建的 PrefixHeader.pch中定義宏和函數等,如下圖所示:

63DD6863-5EB8-444A-A976-8CB82E8FCC1A.png

注意:到該步驟,我們文件也創建了,函數和宏也定義了,我們現在是否可以使用它們了呢?答案是:不可以!!!因為,PrefixHeader.pch是OC類型的文件,如果要在Swift 工程中使用,就不必須使用文件的橋接文件。接下來我們就創建這個橋接文件。

6、創建Swift 調用OC 文件的橋接文件 Swift_Pch-Bridging-Header.h,在工程中點擊鼠標左鍵,選擇New File... 選項,進入模塊選區。在Source區域中選擇Cocoa Touch Class 選項,進入配置界面,在配置界面的 Language中選擇 Objective-C 和你創建的文件的父類和名字,然后,Xcode就會彈出一個 Would you like to configure an Objective-c bridging header?標題的彈框。如下圖所示:

3615AFDB-BA1A-4600-B042-A6A8D272C235.png

7、我們在第六步中選擇 Create Bridging Header 按鈕,創建一個 Swift_Pch-Bridging-Header.h的橋接文件,如下圖所示:

C4F8BC9B-42E8-49C1-BAB4-F3EA4C5B67A9.png

8、在Swift_Pch-Bridging-Header.h 引入 PrefixHeader.pch文件,如下圖所示:

8CCBB301-6B13-4678-8D66-ADBFE7882BEA.png

9、在 Swift 的項目中測試使用 PrefixHeader.pch文件中定義的宏(數值、字符差),其中,函數不能使用,如下圖所示:

833FBF1F-06E2-41E6-9680-39142B591A22.png

10、那我們如何調用在PCH中定義的函數呢?

經過第九步的測試,我們目前只可以調用一些簡單的常量,函數不能夠調用。我們那如何使用PCH 中我們定義的函數紅呢?答案是:使用一個Objective-C的一個繼承與NSObject 的類。在該類中實現對用PCH 函數宏的方法名字,在該類中調用PCH中定義的宏。創建的繼承與NSObejct類的文件是ConfigManager.hConfigManager.m,如下圖所示:

1、ConfigManager.h 圖
122491D8-4DA3-4C0A-B038-BBC9AA5F906C.png
2、ConfigManager.m 圖
6B7285BD-201D-449F-B6C2-F53774E90115.png

11 、我們再次在項目中測試,別忘了把 #import "ConfigManager.h" 加入到Swift 調用OC的過度橋中,測試結果如下:

88CE677E-31CE-46E2-A43E-D794104AD95F.png

12 、總結

經過測試,我們終于可以調用Objective-C的PCH文件,這樣使用不足之處,就是使用一個 Object_OC的類進行,宏和方法的轉換,在用該類在Swift 中使用宏函數。所以,不建議使用第二種,建議第一種使用'PCH'的方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,908評論 18 139
  • ????2014年的蘋果全球開發者大會(WWDC),當Craig Federighi向全世界宣布“We have ...
    jackfrued閱讀 5,851評論 11 49
  • 2014年的蘋果全球開發者大會(WWDC),當Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,311評論 0 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,237評論 25 708
  • 離開城市好幾個月,回到鄉下農村發呆,勞作,思考人生。 因為車禍,做了手術。家里又沒有人在,家里覺得我可以在家煮飯吃...
    駱駝和馬閱讀 313評論 0 0