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