Swift Fundamentals
Value types, optionals, enums, protocols e generics
Value Types vs Reference Types
A diferenca entre struct e class em Swift vai alem de semantica β impacta concorrencia, performance e previsibilidade do codigo.
| Aspecto | struct | class |
|---|---|---|
| Semantica | Value type β copia ao atribuir | Reference type β compartilha referencia |
| Alocacao | Stack (geralmente) | Heap (sempre) |
| Heranca | Nao suporta | Suporta heranca de classe |
| Identidade | Comparacao por valor (Equatable) | Comparacao por referencia (===) |
| Mutabilidade | mutating necessario para alterar self | Pode mutar livremente (var ou let nao protege propriedades) |
| Thread safety | Naturalmente seguro (copia independente) | Requer sincronizacao explicita |
| ARC | Nao precisa | Reference 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.
| Tecnica | Uso | Quando usar |
|---|---|---|
guard let | Early return se nil | Inicio de funcoes β reduz aninhamento |
if let | Unwrap condicional em bloco | Quando precisa executar codigo somente se valor existe |
?? (nil coalescing) | Valor padrao | Fallback simples sem logica complexa |
map / flatMap | Transformacao funcional | Encadear 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).
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.