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-эквивалента флагов препроцессора. Вы используете его точно так же, как и "другие флаги Swift", за исключением того, что нет необходимости добавлять значение с помощью "- D " (так что это просто немного уборщик.)
С Xcode 8 примечания к выпуску:
Active Compilation Conditions
- это новый параметр сборки для передачи флагов условной компиляции компилятору Swift. Каждый элемент значения этого параметра переходит в swiftc с префиксом-
D, таким же образом, что элементыPreprocessor Macros
перейти к 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
флаг