日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Swift中使用构建配置来支持条件编译-b

發(fā)布時(shí)間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift中使用构建配置来支持条件编译-b 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Objective-C中,我們經(jīng)常使用預(yù)處理指令來(lái)幫助我們根據(jù)不同的平臺(tái)執(zhí)行不同的代碼,以讓我們的代碼支持不同的平臺(tái),如:

1 2 3 4 5 6 7 8 9 #if?TARGET_OS_IPHONE ????#define?MAS_VIEW?UIView????????????? #elif?TARGET_OS_MAC ????#define?MAS_VIEW?NSView #endif

在swift中,由于對(duì)C語(yǔ)言支持沒(méi)有Objective-C來(lái)得那么友好(暫時(shí)不知swift 2到C的支持如何),所以我們無(wú)法像在Objective-C中那樣自如而舒坦地使用預(yù)處理指令。

不過(guò),swift也提供了自己的方式來(lái)支持條件編譯,即使用build configurations(構(gòu)建配置)。Build configurations已經(jīng)包含了字面量true和false,以及兩個(gè)平臺(tái)測(cè)試函數(shù)os()和arch()。

其中os()用于測(cè)試系統(tǒng)類型,可傳入的參數(shù)包含OSX, iOS, watchOS,所以上面的代碼在swift可改成:

1 2 3 4 5 #if?os(iOS) ????typealias?MAS_VIEW?=?UIView #elseif?os(OSX) ????typealias?MAS_VIEW?=?NSView #endif

注:在WWDC 2014的“Sharing code between iOS and OS X”一節(jié)(session 233)中,Elizabeth Reid將這種方式稱為Shimming

遺憾的是,os()只能檢測(cè)系統(tǒng)類型,而無(wú)法檢測(cè)系統(tǒng)的版本,所以這些工作只能放在運(yùn)行時(shí)去處理。關(guān)于如何檢測(cè)系統(tǒng)的版本,Mattt Thompson老大在它的Swift System Version Checking一文中給了我們答案。

我們?cè)賮?lái)看看arch()。arch()用于測(cè)試CPU的架構(gòu),可傳入的值包括x86_64, arm, arm64, i386。需要注意的是arch(arm)對(duì)于ARM 64的設(shè)備來(lái)說(shuō),不會(huì)返回true。而arch(i386)在32位的iOS模擬器上編譯時(shí)會(huì)返回true。

如果我們想自定義一些在調(diào)試期間使用的編譯配置選項(xiàng),則可以使用-D標(biāo)識(shí)來(lái)告訴編譯器,具體操作是在”Build Setting”–>“Swift Compiler-Custom Flags”–>“Other Swift Flags”–>“Debug”中添加所需要的配置選項(xiàng)。如我們想添加常用的DEGUB選項(xiàng),則可以在此加上”-D DEBUG”。這樣我們就可以在代碼中來(lái)執(zhí)行一些debug與release時(shí)不同的操作,如

1 2 3 4 5 #if?DEBUG ????let?totalSeconds?=?totalMinutes #else ????let?totalSeconds?=?totalMinutes?*?60 #endif

一個(gè)簡(jiǎn)單的條件編譯聲明如下所示:

1 2 3 4 5 #if?build?configuration ????statements #else ????statements #endif

當(dāng)然,statements中可以包含0個(gè)或多個(gè)有效的swift的statements,其中可以包括表達(dá)式、語(yǔ)句、和控制流語(yǔ)句。另外,我們也可以使用&&和||操作符來(lái)組合多個(gè)build configuration,同時(shí),可以使用!操作符來(lái)對(duì)build configuration取反,如下所示:

1 2 3 4 5 6 7 #if?build?configuration?&&?!build?configuration ????statements #elseif?build?configuration ????statements #else ????statements #endif

需要注意的是,在swift中,條件編譯語(yǔ)句必須在語(yǔ)法上是有效的,因?yàn)榧词惯@些代碼不會(huì)被編譯,swift也會(huì)對(duì)其進(jìn)行語(yǔ)法檢查。

參考

  • Cross-platform Swift

  • Shimming in Swift

  • Swift System Version Checking

  • Interacting with C APIs

總結(jié)

以上是生活随笔為你收集整理的Swift中使用构建配置来支持条件编译-b的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。