Arquivo de constantes globais em Swift: tudo o que você queria saber, mas tinha medo de perguntar

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Para que serve um arquivo de constantes globais em Swift?

\n\n

Todo desenvolvedor iOS já se deparou pelo menos uma vez com a situação em que os mesmos valores — URL do servidor, chaves de API, identificadores de células, margens — estão espalhados por todo o projeto. E então o chefe diz: "Mude a URL base". Você abre o projeto e começa a missão: encontrar todas as ocorrências de "https://old.api.com" e substituir pela nova. Familiar?

\n\n

É exatamente para isso que serve o arquivo de constantes globais em Swift — um local único onde todos os "números mágicos" e strings são armazenados. Neste artigo, vamos abordar as perguntas mais frequentes do Stack Overflow (o tópico tem milhares de visualizações!) e dar respostas claras com exemplos de código. Vamos lá!

\n\n

Pergunta 1: Como criar um arquivo de constantes simples em Swift?

\n\n

A maneira mais direta é usar uma struct com propriedades estáticas. Por que struct e não class? Porque structs são tipos de valor, são mais leves e não requerem um inicializador.

\n\n
// Constants.swift\nimport Foundation\n\nstruct AppConstants {\n    static let baseURL = "https://api.myapp.com/v1"\n    static let apiKey = "sua-chave-secreta-aqui"\n    static let defaultTimeout: TimeInterval = 30.0\n    static let maxRetryCount = 3\n}
\n\n

Usar é simples: AppConstants.baseURL. Pronto, sem strings mágicas. As constantes Swift com let garantem que o valor não será alterado acidentalmente.

\n\n

Por que não usar variáveis globais?

\n\n

Você pode, é claro, escrever:

\n\n
let baseURL = "https://api.myapp.com/v1"
\n\n

Mas isso é um arquivo de constantes globais em Swift na sua forma mais primitiva. O problema: não há namespace. Se você tiver 50 constantes, rapidamente ficará confuso sobre qual pertence a quê. A struct resolve esse problema de forma elegante.

\n\n

Pergunta 2: Enum ou Struct — o que escolher para constantes?

\n\n

No Stack Overflow, há debates acalorados. Vamos analisar ambas as abordagens.

\n\n

Struct (opção popular)

\n\n
struct UIConstants {\n    static let cornerRadius: CGFloat = 12.0\n    static let defaultPadding: CGFloat = 16.0\n    static let animationDuration: Double = 0.3\n}
\n\n

Vantagens: familiar, pode criar instâncias (embora geralmente não seja necessário), fácil de estender com extension.

\n\n

Desvantagens: tecnicamente, você pode escrever UIConstants(), o que não faz sentido.

\n\n

Enum (opção mais rigorosa)

\n\n
enum NetworkConstants {\n    static let baseURL = "https://api.myapp.com/v1"\n    static let apiVersion = "2.0"\n    static let defaultHeaders: [String: String] = [\n        "Content-Type": "application/json"\n    ]\n}
\n\n

Vantagens: não é possível criar uma instância — o compilador não permite. Namespace puro. Ideal para Swift enum constants.

\n\n

Desvantagens: alguns consideram isso um "hack" — usar enum fora de seu propósito original.

\n\n

Meu veredito: se você quer ser um desenvolvedor "correto" e se proteger contra a criação acidental de instâncias — use enum. Se você trabalha em uma equipe onde todos estão acostumados com struct — use struct. Ambas as opções são válidas.

\n\n

Pergunta 3: Como organizar constantes por categorias?

\n\n

Quando o projeto cresce, um único arquivo se torna uma bagunça. A solução são structs aninhadas ou arquivos separados para cada categoria.

\n\n

Opção A: Structs aninhadas (em um único arquivo)

\n\n
struct Constants {\n    struct Network {\n        static let baseURL = "https://api.myapp.com"\n        static let timeout: TimeInterval = 30\n    }\n    \n    struct UI {\n        static let cornerRadius: CGFloat = 8\n        static let buttonHeight: CGFloat = 44\n    }\n    \n    struct Storage {\n        static let userDefaultsKey = "com.myapp.user"\n        static let maxCacheSize =                

Blogs

Book Recommendations