Swift e uma linguagem type-safe que favorece value types (structs, enums) sobre reference types (classes). Entender essa distincao e fundamental para escrever codigo seguro e performatico no IdentityKit.

Value Types vs Reference Types

A diferenca entre struct e class em Swift vai alem de semantica β€” impacta concorrencia, performance e previsibilidade do codigo.

Aspectostructclass
SemanticaValue type β€” copia ao atribuirReference type β€” compartilha referencia
AlocacaoStack (geralmente)Heap (sempre)
HerancaNao suportaSuporta heranca de classe
IdentidadeComparacao por valor (Equatable)Comparacao por referencia (===)
Mutabilidademutating necessario para alterar selfPode mutar livremente (var ou let nao protege propriedades)
Thread safetyNaturalmente seguro (copia independente)Requer sincronizacao explicita
ARCNao precisaReference counting (retain cycles possiveis)

Optionals

Optionals representam a ausencia de valor de forma type-safe. Swift forca o desenvolvedor a lidar com nil explicitamente, eliminando null pointer exceptions.

TecnicaUsoQuando usar
guard letEarly return se nilInicio de funcoes β€” reduz aninhamento
if letUnwrap condicional em blocoQuando precisa executar codigo somente se valor existe
?? (nil coalescing)Valor padraoFallback simples sem logica complexa
map / flatMapTransformacao funcionalEncadear operacoes em optionals

Enums com Associated Values

Enums em Swift sao muito mais poderosos que em outras linguagens. Cada case pode carregar dados associados de tipos diferentes, funcionando como algebraic data types (sum types).

// Enums com associated values enum Result<Success, Failure: Error> { case success(Success) case failure(Failure) } // Pattern matching exhaustivo func handle(_ result: Result<String, Error>) { switch result { case .success(let value): print("Got: \(value)") case .failure(let error): print("Error: \(error.localizedDescription)") } }

Protocols

Protocols definem contratos que tipos devem implementar. Diferente de interfaces em Java/C#, protocols em Swift podem ser adotados por structs, enums e classes igualmente. Com protocol extensions, voce pode fornecer implementacoes padrao.

Protocol-Oriented Programming: Swift favorece composicao via protocols sobre heranca de classes. Prefira definir comportamento em protocols com extensoes em vez de hierarquias de classes.