Swift: как использовать флаги препроцессора (например, "#if DEBUG") для реализации ключей API?

на Objective-C иногда было полезно использовать статические строковые константы для определения альтернативных ключей API (например, для различения ключей выпуска и отладки для пакетов аналитики, таких как MixPanel, Flurry или Crashlytics):

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

и потом...

[Analytics startSession:API_KEY];

как это перевести на Swift, так как компилятор Swift больше не использует препроцессор?

2 ответов


Apple включила полную поддержку флагов препроцессора Swift с Xcode 8, поэтому больше нет необходимости устанавливать эти значения в "других флагах Swift".

новый параметр называется "условия активной компиляции", который обеспечивает поддержку верхнего уровня для Swift-эквивалента флагов препроцессора. Вы используете его точно так же, как и "другие быстрые Флаги", за исключением того, что нет необходимости добавлять значение С "- D " (так что это немного уборщик.)

С Xcode 8 примечания к выпуску:

Active Compilation Conditions - это новый параметр сборки для передачи флагов условной компиляции компилятору Swift. Каждый элемент значения этого параметра переходит в swiftc с префиксом -D, таким же образом, что элементы Preprocessor Macros pass to clang с тем же префиксом. (22457329)

enter image description here

вы используете вышеуказанную настройку, как Итак:

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

обновлено: Xcode 8 теперь поддерживает это автоматически, см. ответ @DanLoewenherz выше.

до Xcode 8 Вы все равно можете использовать макросы таким же образом:

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

однако для того, чтобы они были подобраны Swift, вам нужно установить "другие флаги Swift" в настройках сборки вашей цели:

  • Откройте настройки сборки для вашей цели
  • Поиск "другие флаги swift"
  • добавьте макросы, которые вы хотите использование, предшествуемое -D флаг

enter image description here