In Objective-C
è stato talvolta utile utilizzare costanti di stringa statiche per definire chiavi API alternative (ad esempio per distinguere tra le chiavi RELEASE e DEBUG per i pacchetti di analisi, come MixPanel, Flurry o Crashlytics):
#if DEBUG static NSString *const API_KEY = @"KEY_A"; #else static NSString *const API_KEY = @"KEY_B"; #endif
e poi…
[Analytics startSession:API_KEY];
Come si traduce in Swift, dal momento che il compilatore Swift non utilizza più un preprocessore?
Apple ha incluso il supporto completo per i flag del preprocessore Swift a partire da Xcode 8 , quindi non è più necessario impostare questi valori in “Altri Swift Flags”.
La nuova impostazione è denominata “Condizioni di compilazione triggers”, che fornisce il supporto di livello superiore per l’equivalente Swift dei flag del preprocessore. Lo usi esattamente nello stesso modo in cui faresti “Altri Swift Flags”, tranne che non è necessario anteporre il valore a “-D” (quindi è solo un po ‘più pulito).
Dalle note di rilascio di Xcode 8 :
Active Compilation Conditions
è una nuova impostazione di build per il passaggio di flag di compilazione condizionale al compilatore Swift. Ogni elemento del valore di questa impostazione passa a swiftc preceduto da-
D, nello stesso modo in cui gli elementi dellePreprocessor Macros
diPreprocessor Macros
passano a clangare con lo stesso prefisso. (22457329)
Si utilizza l’impostazione sopra in questo modo:
#if DEBUG let accessToken = "DebugAccessToken" #else let accessToken = "ProductionAccessToken" #endif
AGGIORNATO: Xcode 8 ora lo supporta automaticamente, vedi la risposta di @ DanLoewenherz sopra.
Prima di Xcode 8, puoi ancora utilizzare Macro allo stesso modo:
#if DEBUG let apiKey = "KEY_A" #else let apiKey = "KEY_B" #endif
Tuttavia, per poter essere raccolti da Swift, devi impostare “Altri Swift Flags” nelle impostazioni di costruzione del tuo objective:
-D