Avatar ·

Substituição de #ifdef em Swift: como usar compilação condicional e flags?

Olá! Estou migrando de Objective-C para Swift e enfrentei um problema. Em Obj-C, eu usava frequentemente diretivas de pré-processador, por exemplo: ```objectivec #ifdef DEBUG NSLog(@"Log de depuração"); #else NSLog(@"Versão de release"); #endif ``` Ou para verificar a plataforma: ```objectivec #if TARGET_OS_IOS // Código iOS #elif TARGET_OS_MAC // Código macOS #endif ``` Em Swift, não consigo encontrar um análogo direto para #ifdef. Tentei escrever algo como: ```swift #if DEBUG print("Log de depuração") #else print("Versão de release") #endif ``` Mas o Xcode diz que `DEBUG` não está definido. Adicionei `-D DEBUG` em Other Swift Flags, mas ainda não funciona. Como configurar corretamente a compilação condicional em Swift? Preciso fazer algo nas Build Settings? E posso criar minhas próprias flags, por exemplo, para diferentes targets (versões lite/pro)? Ficarei grato por uma explicação detalhada com exemplos! <<>>

Compilação Condicional em Swift: Guia Completo

Em Swift, a compilação condicional realmente funciona de forma diferente do Obj-C. Aqui está como configurar corretamente:

1. Flags padrão do Swift: O Swift já define algumas flags automaticamente, como `DEBUG` para configurações de Debug. Para usá-las, vá em Build Settings > Swift Compiler - Custom Flags > Other Swift Flags e adicione `-D DEBUG` (sem aspas) para a configuração Debug. Para Release, não adicione nada.

2. Exemplo funcional:

```swift #if DEBUG print("Log de depuração") #else print("Versão de release") #endif ```

3. Verificação de plataforma: Use `#if os(iOS)`, `#if os(macOS)`, etc.

```swift #if os(iOS) // Código iOS #elseif os(macOS) // Código macOS #endif ```

4. Flags personalizadas: Para targets diferentes (lite/pro), adicione flags como `-D LITE` ou `-D PRO` nas configurações de cada target.

```swift #if LITE print("Versão Lite") #elseif PRO print("Versão Pro") #endif ```

Lembre-se de que as flags devem ser adicionadas nas Build Settings corretas para cada configuração (Debug/Release) e target.