iOS開發——開發總結Swift篇&Swift中的條件編譯

來源:互聯網
上載者:User

標籤:

Swift中的條件編譯

 

在Objective-C中,我們經常使用預先處理指令來協助我們根據不同的平台執行不同的代碼,以讓我們的代碼支援不同的平台,如:

1 #if TARGET_OS_IPHONE2  3     #define MAS_VIEW UIView             4  5 #elif TARGET_OS_MAC6  7     #define MAS_VIEW NSView8  9 #endif

在swift中,由於對C語言支援沒有Objective-C來得那麼友好(暫時不知swift 2到C的支援如何),所以我們無法像在Objective-C中那樣自如而舒坦地使用預先處理指令。

不過,swift也提供了自己的方式來支援條件編譯,即使用build configurations(構建配置)。Build configurations已經包含了字面量true和false,以及兩個平台測試函數os()和arch()。

其中os()用於測試系統類別型,可傳入的參數包含OSX, iOS, watchOS,所以上面的代碼在swift可改成:

1 #if os(iOS)2     typealias MAS_VIEW = UIView3 #elseif os(OSX)4     typealias MAS_VIEW = NSView5 #endif

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

遺憾的是,os()只能檢測系統類別型,而無法檢測系統的版本,所以這些工作只能放在運行時去處理。關於如何檢測系統的版本,Mattt Thompson老大在它的Swift System Version Checking一文中給了我們答案。

我們再來看看arch()。arch()用於測試CPU的架構,可傳入的值包括x86_64, arm, arm64, i386。需要注意的是arch(arm)對於ARM 64的裝置來說,不會返回true。而arch(i386)在32位的iOS模擬器上編譯時間會返回true。

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

1 #if DEBUG2     let totalSeconds = totalMinutes3 #else4     let totalSeconds = totalMinutes * 605 #endif

一個簡單的條件編譯聲明如下所示:

#if build configuration      statements 3#else      statements  #endif

當然,statements中可以包含0個或多個有效swift的statements,其中可以包括運算式、語句、和控制流程語句。另外,我們也可以使用&&和||操作符來組合多個build configuration,同時,可以使用!操作符來對build configuration取反,如下所示:

1 #if build configuration && !build configuration2     statements3 #elseif build configuration4     statements5 #else6     statements7 #endif

需要注意的是,在swift中,條件編譯語句必須在文法上是有效,因為即使這些代碼不會被編譯,swift也會對其進行語法檢查。

iOS開發——開發總結Swift篇&Swift中的條件編譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.