1、條件編譯
2、宏定義define
1、條件編譯
- Swift中沒有宏定義的概念,因此我們不能使用#ifdef的方法來檢查某個符號是否經(jīng)過宏定義。但是為了控制編譯流程和內(nèi)容,Swift還是為我們提供了幾種簡單的機制來根據(jù)需求定制編譯內(nèi)容的。
首先是#if這套編譯標記還是存在的,使用的語法也和原來沒有區(qū)別
#if <condition>
#elseif <condition>
#else
#endif
但是這幾個表達式里的condition并不是任意的。Swift內(nèi)建了幾種平臺和架構(gòu)的組合,來幫助我們?yōu)椴煌钠脚_編譯不同的代碼。
方法os(),可選參數(shù)OSX,iOS
方法arch(), 可選參數(shù)x86_64, arm, arm64, i386
- 對自定義的符號進行條件編譯。為了使自定義的編譯符號FREE_VERSION有效,我們需要在項目的編譯選項中進行設(shè)置,在項目的Build Settings中,找到Swift Compiler-Custom Flags,并在其中的Other Swift Flags加上 -D FREE_VERSION就可以了。
2、宏定義define
- Swift中沒有宏定義。
- Swift中將宏定義徹底從語言中拿掉了,并且Apple給了我們一些替代的建議:
I、使用合適作用范圍的let或者get屬性來替代原來的宏定義值,例如很多Darwin中的C的define值就是這么做的:var M_PI: Double { get }
II、對于宏定義的方法,類似的在同樣作用域?qū)懗蒘wift方法。
III、隨著#define的消失,像#ifdef這樣通過宏定義是否存在來進行條件判斷并決定某些代碼是否參與編譯的方式也消失了。但是我們?nèi)匀豢梢允褂?if并配合編譯的配置來完成條件編譯。