2016-08-07 49 views
38

Objective-C它是使用靜態字符串常量來定義備用API鍵(例如發佈和調試鍵之間進行區分用於分析套件,像MixPanel,亂舞或Crashlytics)有時是有用的:Swift:如何使用PREPROCESSOR標誌(如`#if DEBUG`)來實現API密鑰?

#if DEBUG 
static NSString *const API_KEY = @"KEY_A"; 
#else 
static NSString *const API_KEY = @"KEY_B"; 
#endif 

然後。 ..

[Analytics startSession:API_KEY]; 

這是如何轉換爲Swift,因爲Swift編譯器不再使用預處理器?

回答

20

之前蘋果列入斯威夫特預處理器標誌爲Xcode 8全力支持,所以不再需要在「其他斯威夫特標誌」設置這些值。

新設置被稱爲「活動編譯條件」,它爲預處理器標誌的Swift等效物提供頂級支持。您可以像使用「其他Swift Flags」一樣使用它,除非不需要用「-D」來預先設置值(所以它只是一點點清潔)。

Xcode 8 release notes

Active Compilation Conditions是一個新的版本設置爲通過條件編譯標誌來雨燕編譯器。此設置值的每個元素都會傳遞給swiftc,前綴爲- D,與Preprocessor Macros的元素以相同的前綴傳遞給clang的方式相同。 (22457329)

enter image description here

您使用上述設置,如下所示:

#if DEBUG 
    let accessToken = "DebugAccessToken" 
#else 
    let accessToken = "ProductionAccessToken" 
#endif 
99

更新:Xcode 8現在自動支持,請參閱上面的@ DanLoewenherz的回覆。

Xcode的8之前,你仍然可以以同樣的方式使用宏:

#if DEBUG 
let apiKey = "KEY_A" 
#else 
let apiKey = "KEY_B" 
#endif 

不過,爲了讓他們斯威夫特被拾起,你需要設置「其他雨燕旗」你的目標構建設置:

  • 打開構建設置爲你的目標
  • 搜索「等迅速旗」
  • 添加您希望使用的宏,由-D標誌

enter image description here