Действительно ли нужны операторы #if DEBUG для предварительного просмотра в SwiftUI, чтобы удалить его в сборке выпуска? - PullRequest
2 голосов
/ 07 июня 2019

Макросы препроцессора довольно часто встречаются в официальных руководствах / видеороликах SwiftUI, например ::10000

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

Это нужно? Компилятор наверняка увидит, что struct не используется внутри, и пропустит весь struct, так как модификатор доступа неявный internal верно? Я думаю, что все, что соответствует PreviewProvider, может быть удалено, но, возможно, это не так для каждого соответствующего объекта, но если он не используется, почему Apple решает включить макрос препроцессора?

Я пытался запустить его в режиме выпуска и найти скомпилированный класс в папке производных данных, но я ничего не понимаю в этом (файл .o). Может ли кто-нибудь подтвердить, действительно ли нам нужно включать макросы для исключения неиспользуемого кода (тип ContentView_Previews нигде не используется в коде, ожидаемом для предварительного просмотра, который в любом случае не используется в сборке выпуска) в сборке выпуска?

1 Ответ

0 голосов
/ 07 июня 2019

Вам не нужно удалять это. DEBUG - это пользовательский флаг, который автоматически добавляется в Your Target -> Build Settings -> Active compilation Conditions. Этот флаг существует только для конфигурации отладки, для сборки выпуска вы будете использовать конфигурацию выпуска, у которой нет этого флага.

Если флаг не существует - код будет пропущен

Подробнее здесь в разделе "Макрос препроцессора DEBUG"

...