Перед быстрым я бы определил набор схем для альфа-версий, бета-версий и дистрибутивов. Каждая из этих схем имела бы набор макросов, которые были определены для предотвращения определенных типов поведения на уровне проекта. Самый простой пример - макрос DEBUG = 1, который по умолчанию задан для всех проектов Xcode в схеме по умолчанию для сборки Run. Можно было бы запросить #ifdef DEBUG... и принять решения в коде соответственно, даже составив ненужный код.
Похоже, что этот тип конфигурационного стробирования не так просто использовать быстро, так как макросы не поддерживаются. Может ли кто-то предложить сопоставимый подход, мне все равно, если код будет составлен сам по себе. Однако я хотел бы использовать функции на основе схемы построения.
В Swift вы все равно можете использовать макросы препроцессора "# if/# else/# endif" (хотя и более ограниченные), согласно Apple docs. Вот пример:
#if DEBUG
let a = 2
#else
let a = 3
#endif
Теперь вы должны установить символ "DEBUG" в другом месте. Установите его в разделе "Swift Compiler - Custom Flags", "Other Swift Flags". Вы добавляете символ DEBUG с записью -D DEBUG
.
(Настройки сборки → Быстрый компилятор - Пользовательские флаги)
Как обычно, вы можете установить другое значение в Debug или в Release.
Я тестировал его в реальном коде; он, похоже, не распознается на детской площадке.
Мы столкнулись с проблемой, не желая устанавливать быстрые флаги компилятора, потому что мы не хотели устанавливать их и поддерживать их в актуальном состоянии для разных целей и т.д. Кроме того, в нашей смешанной кодовой базе мы не хотели чтобы не забывать постоянно устанавливать флаги для каждого языка.
Для наших мы объявили файл в ObjC
PreProcessorMacros.h
extern BOOL const DEBUG_BUILD;
В .m
PreProcessorMacros.m
#ifdef DEBUG
BOOL const DEBUG_BUILD = YES;
#else
BOOL const DEBUG_BUILD = NO;
#endif
Затем в Objective-C заголовок заголовка
#import "PreProcessorMacros.h"
Теперь, используйте это в своей кодовой базе Swift
if DEBUG_BUILD {
println("debug")
} else {
println("release")
}
Это, безусловно, обходной путь, но он решил нашу проблему, поэтому я разместил ее здесь в надежде, что это поможет. Это не означает, что существующие ответы недействительны.
Более быстрое решение для метода Logans. Установите -D DEBUG
в Other Swift Flags
раздела Swift Compiler - Custom Flags
в настройках сборки вашей цели.
Затем объявите следующий метод в глобальной области:
#if DEBUG
let isDebugMode = true
#else
let isDebugMode = false
#endif
Теперь используйте его как
if isDebugMode {
// Do debug stuff
}
Я работаю в базе кода смешанного языка, где код obj-c использует макрос для отправки отладочных сообщений на консоль (и этот макрос полагается на наш флаг препроцессора отладки). Я хотел иметь возможность вызвать тот же самый макрос в быстром коде...
Мягко раздражает, что я не могу просто вызвать макрос прямо в быстром коде, но по крайней мере сейчас у меня есть только одно место в проекте, чтобы беспокоиться о включении/отключении флага отладки.