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)
вы используете вышеуказанную настройку, как Итак:
#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
флаг