引言
在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...] 選項,如下圖所示:
2> 按照第一步進行會進入下面模塊的選擇,然后選擇 [Swift File] 模塊。如下圖所示:
3> 經過第二步,我們點擊 Next 后,進入文件命名的界面,然后給文件命名為 SwiftHeader ,如下圖所示:
4> 經過第三步,然后我們點擊 Create 后,在工程中得到我們創建的Swift File文件 SwiftHeader.swift。如下圖所示:
5> 我們在創建的 SwiftHeader.swift文件中創建常量和函數如下圖所示:
6> 我們對我們創建SwiftHeader.swift中的常量和函數的測驗,如下圖所示:
7>對Swift 項目使用 Swift File文件的總結
經過第六步的測試,我們可以在工程的全局調用SwiftHeader.swift中的常量、函數、回調等。
Swift 中的Pch文件的創建和使用
1、在工程中選擇一個控制器,然后鼠標左鍵選擇 New File...選項,然后進入模塊選擇區,我們將區域滾動到 other區域,我們就可以看到一個 PCH File的紅色文件,如下圖所示:
2、經過第一步,我們點擊 Next,進入下一步,給文件的命名,我們命名為PrefixHeader ,如圖下圖所示:
3、我們點擊 Create 后,在工程里面我們就可以看到我們創建的 PrefixHeader.pch文件。如下圖所示:
4、我們在創建的 PrefixHeader.pch中定義宏和函數等,如下圖所示:
注意:到該步驟,我們文件也創建了,函數和宏也定義了,我們現在是否可以使用它們了呢?答案是:不可以!!!因為,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?標題的彈框。如下圖所示:
7、我們在第六步中選擇 Create Bridging Header 按鈕,創建一個 Swift_Pch-Bridging-Header.h的橋接文件,如下圖所示:
8、在Swift_Pch-Bridging-Header.h 引入 PrefixHeader.pch文件,如下圖所示:
9、在 Swift 的項目中測試使用 PrefixHeader.pch文件中定義的宏(數值、字符差),其中,函數不能使用,如下圖所示:
10、那我們如何調用在PCH中定義的函數呢?
經過第九步的測試,我們目前只可以調用一些簡單的常量,函數不能夠調用。我們那如何使用PCH 中我們定義的函數紅呢?答案是:使用一個Objective-C的一個繼承與NSObject 的類。在該類中實現對用PCH 函數宏的方法名字,在該類中調用PCH中定義的宏。創建的繼承與NSObejct類的文件是ConfigManager.h 和ConfigManager.m,如下圖所示:
1、ConfigManager.h 圖
2、ConfigManager.m 圖
11 、我們再次在項目中測試,別忘了把 #import "ConfigManager.h" 加入到Swift 調用OC的過度橋中,測試結果如下:
12 、總結
經過測試,我們終于可以調用Objective-C的PCH文件,這樣使用不足之處,就是使用一個 Object_OC的類進行,宏和方法的轉換,在用該類在Swift 中使用宏函數。所以,不建議使用第二種,建議第一種使用'PCH'的方法。