O que swift-style faz?
Convenções de estilo de código Swift para código limpo e legível. Use ao escrever código Swift para garantir formatação, nomenclatura, organização e padrões idiomáticos consistentes.
Regras de Nomenclatura
- Use
camelCasepara nomes de variáveis, constantes, funções e parâmetros. Exemplo:userName,calculateTotal. - Use
PascalCasepara nomes de tipos (structs, classes, enums, protocols). Exemplo:UserProfile,NetworkManager. - Nomes devem ser descritivos, mas concisos. Evite abreviações como
usroubtn. - Prefira nomes baseados em papéis para protocols: suffixo
Protocolou nome descritivo, conforme a comunidade Swift. Exemplo:DataProviderouCachable. - Para booleanos, use prefixos como
is,has,can. Exemplo:isActive,hasPermission.
Formatação e Espaçamento
- Use 4 espaços para indentação. Não use tabs.
- Coloque chaves abertas na mesma linha da declaração (estilo K&R). Exemplo:
func fetchData() { // código } - Use espaços em branco para separar blocos lógicos. Não exagere.
- Limite as linhas a 120 caracteres, mas prefira ~100 para facilitar a leitura em telas menores.
- Não use
;no final das linhas. - Remova importações não utilizadas.
Convenções Específicas da Linguagem
- Prefira
letsobrevarsempre que o valor não precisar ser mutável. - Use
guard letouif letpara desembrulhar opcionais. Dê preferência aguard letno início de funções para early exit. - Use
deferpara limpeza de recursos, como fechar arquivos ou liberar locks. - Para coleções, prefira
map,filter,reducee outras funções de alta ordem em vez de loops explícitos, a menos que seja mais claro umfor. - Para enums com valores associados, use
switchcom cases exaustivos. Usedefaultapenas quando fizer sentido. - Tratamento de erros: use
throwsedo-catchpara erros esperados. Evitetry!a menos que a operação nunca possa falhar. - Use
Selfdentro de protocolos e tipos genéricos quando se referir ao tipo conforme.
Organização de Arquivos e Tipos
- Coloque cada tipo principal em um arquivo separado, com o nome do arquivo igual ao nome do tipo.
- Use extensões (extensions) para agrupar funcionalidades relacionadas (ex: métodos públicos, conformidade com protocolos).
- Use
// MARK: -para organizar seções dentro de um arquivo, especialmente em classes grandes. - Prefira structs sobre classes por padrão. Use classes apenas quando necessário (herança Objective-C, referência compartilhada, etc.).
- Para propriedades imutáveis computadas, prefira
letcom closures{ ... }()ou inicializadores personalizados.
Padrões Idiomáticos
- Use
Equatable,HashableeCodablepara tipos que representam dados. - Use
Resultpara operações assíncronas ou que podem falhar, em vez de callbacks com opcionais. - Evite force unwrap (
!) a menos que haja garantia absoluta de que o valor não é nil. - Prefira enums para estados finitos (ex:
loading,success,failure) em vez de strings ou inteiros. - Use
@availablee#availablepara compatibilidade entre versões do iOS/macOS. - Em closures, use
[weak self]para evitar ciclos de retenção quandoselffor capturado. - Ao acessar propriedades ou métodos singleton, prefira
sharedsobre nomes genéricos.
Comentários e Documentação
- Use comentários para explicar por que algo é feito, não o que é feito (o código deve ser autoexplicativo).
- Para APIs públicas, use comentários de documentação no formato
///. Inclua descrição, parâmetros e retorno. - Exemplo:
/// Calcula o total com desconto. /// - Parameter price: Preço original. /// - Parameter discount: Valor do desconto. /// - Returns: Preço final após desconto. func calculateDiscountedPrice(price: Double, discount: Double) -> Double
Siga estas convenções sempre que escrever código Swift em projetos novos ou existentes para garantir consistência e legibilidade.