自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Swift小技巧:中使用構(gòu)建配置來支持條件編譯

移動(dòng)開發(fā) iOS 開發(fā)
在swift中,由于對(duì)C語言支持沒有Objective-C來得那么友好(暫時(shí)不知swift 2到C的支持如何),所以我們無法像在Objective-C中那樣自如而舒坦地使用預(yù)處理指令。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

參考

Cross-platform Swift

Shimming in Swift

Swift System Version Checking

Interacting with C APIs

責(zé)任編輯:chenqingxiang 來源: 南峰子的技術(shù)博客
相關(guān)推薦

2015-04-17 16:44:22

swiftOC

2015-02-04 10:32:57

Objective-CSwift

2021-01-05 08:39:51

容器前端流水線

2022-11-30 15:01:11

React技巧代碼

2022-07-04 08:51:43

條件語句JavaScript

2014-07-02 09:47:06

SwiftCocoaPods

2015-08-27 09:46:09

swiftAFNetworkin

2022-08-11 11:35:43

Vuev-model?表單

2015-09-01 10:32:11

2015-09-01 14:29:33

2014-08-01 15:16:05

SwiftC語言

2021-06-07 23:51:16

MacGo服務(wù)

2020-02-17 16:28:49

開發(fā)技能代碼

2021-11-22 09:00:00

后端開發(fā)CMS

2021-12-16 10:53:23

shell命令腳本

2022-08-18 10:01:35

Jmeter技巧

2021-05-13 12:46:54

GNU ScreenLinux

2010-09-09 10:23:23

DIVCSS垂直居中

2009-06-24 10:49:08

Unix

2021-12-24 08:55:58

蘋果 iOS 15 SwiftUI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)