條件編譯

在 C 系語言中慕趴,可以使用 #if 或者 #ifdef 之類的編譯條件分支來控制哪些代碼需要編譯,而哪些代碼不需要赤赊。Swift 中沒有宏定義的概念吵血,因此我們不能使用 #ifdef 的方法來檢查某個(gè)符號是否經(jīng)過宏定義。但是為了控制編譯流程和內(nèi)容扼睬,Swift 還是為我們提供了幾種簡單的機(jī)制來根據(jù)需求定制編譯內(nèi)容的逮栅。

首先是 #if 這一套編譯標(biāo)記還是存在的,使用的語法也和原來沒有區(qū)別:

#if <condition>

#elseif <condition>

#else

#endif

當(dāng)然窗宇,#elseif 和 #else 是可選的证芭。

但是這幾個(gè)表達(dá)式里的 condition 并不是任意的。Swift 內(nèi)建了幾種平臺和架構(gòu)的組合担映,來幫助我們?yōu)椴煌钠脚_編譯不同的代碼,具體地:

方法  可選參數(shù)
os()     OSX, iOS
arch()  x86_64, arm, arm64, i386

注意這些方法和參數(shù)都是大小寫敏感的叫潦。舉個(gè)例子蝇完,如果我們統(tǒng)一我們在 iOS 平臺和 Mac 平臺的關(guān)于顏色的 API 的話,一種可能的方法就是配合 typealias 進(jìn)行條件編譯:

#if os(OSX)
    typealias Color = NSColor
#else
    typealias Color = UIColor
#endif

另外對于 arch() 的參數(shù)需要說明的是 arm 和 arm64 兩項(xiàng)分別對應(yīng) 32 位 CPU 和 64 位 CPU 的真機(jī)情況矗蕊,而對于模擬器短蜕,相應(yīng)地 32 位設(shè)備的模擬器和 64 位設(shè)備的模擬器所對應(yīng)的分別是 i386 和 x86_64,它們也是需要分開對待的傻咖。

另一種方式是對自定義的符號進(jìn)行條件編譯朋魔,比如我們需要使用同一個(gè) target 完成同一個(gè) app 的收費(fèi)版和免費(fèi)版兩個(gè)版本,并且希望在點(diǎn)擊某個(gè)按鈕時(shí)收費(fèi)版本執(zhí)行功能卿操,而免費(fèi)版本彈出提示的話警检,可以使用類似下面的方法:

@IBAction func someButtonPressed(sender: AnyObject!) {
    #if FREE_VERSION
        // 彈出購買提示孙援,導(dǎo)航至商店等
    #else
        // 實(shí)際功能
    #endif
}

在這里我們用 FREE_VERSION 這個(gè)編譯符號來代表免費(fèi)版本。為了使之有效扇雕,我們需要在項(xiàng)目的編譯選項(xiàng)中進(jìn)行設(shè)置拓售,在項(xiàng)目的 Build Settings 中,找到 Swift Compiler - Custom Flags镶奉,并在其中的 Other Swift Flags 加上 -D FREE_VERSION 就可以了础淤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哨苛,隨后出現(xiàn)的幾起案子鸽凶,更是在濱河造成了極大的恐慌,老刑警劉巖建峭,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻侥,死亡現(xiàn)場離奇詭異,居然都是意外死亡迹缀,警方通過查閱死者的電腦和手機(jī)使碾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祝懂,“玉大人票摇,你說我怎么就攤上這事⊙馀睿” “怎么了矢门?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灰蛙。 經(jīng)常有香客問我祟剔,道長,這世上最難降的妖魔是什么摩梧? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任物延,我火速辦了婚禮,結(jié)果婚禮上仅父,老公的妹妹穿的比我還像新娘叛薯。我一直安慰自己,他們只是感情好笙纤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布耗溜。 她就那樣靜靜地躺著,像睡著了一般省容。 火紅的嫁衣襯著肌膚如雪抖拴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天腥椒,我揣著相機(jī)與錄音阿宅,去河邊找鬼候衍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛家夺,可吹牛的內(nèi)容都是我干的脱柱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拉馋,長吁一口氣:“原來是場噩夢啊……” “哼榨为!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起煌茴,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤随闺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蔓腐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矩乐,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年回论,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了散罕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傀蓉,死狀恐怖欧漱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葬燎,我是刑警寧澤误甚,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谱净,受9級特大地震影響窑邦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壕探,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一冈钦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧李请,春花似錦瞧筛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庆猫。三九已至认轨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間月培,已是汗流浹背嘁字。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工恩急, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纪蜒。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓衷恭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親纯续。 傳聞我的和親對象是個(gè)殘疾皇子随珠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在我們的工程中,很多時(shí)候只希望在滿足一定條件的時(shí)候才進(jìn)行編譯猬错,這是就需要用到條件編譯窗看。 #if #elif #el...
    JerryLMJ閱讀 10,174評論 0 14
  • 1、why 在實(shí)際開發(fā)中我們常常需要區(qū)分不同的環(huán)境倦炒,此處以最簡單的開發(fā)與生產(chǎn)環(huán)境為例显沈,每次打包通過修改代碼區(qū)分不同...
    oneday527閱讀 6,907評論 1 10
  • // C 系語言中,可以是用 #if 或者 #ifdef 之類的編譯條件分支來控制那些代碼需要編逢唤。/*#if#el...
    fordring2008閱讀 329評論 0 0
  • 有些程序在調(diào)試、兼容性裹驰、平臺移植等情況下可能想要通過簡單地設(shè)置一些參數(shù)就生成一個(gè)不同的軟件隧熙,這當(dāng)然可以通過變量設(shè)置...
    hehtao閱讀 1,147評論 0 11
  • 在寂靜的村莊 時(shí)有喜鵲撞窗、彩虹臨頭 這是地震與狂風(fēng)暴雨的詩意前奏 冬日小心翼翼地孵化著春天 春天夭折幻林,一次又一次...
    柴小扉閱讀 263評論 4 6