Swift em 2025: visão geral das novidades e exemplos práticos de código

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

Swift em 2025: o que há de novo na prática?



2025 foi um ano marcante para o ecossistema Apple. O Swift 6 foi lançado — uma versão que promete não apenas estabilidade, mas também mudanças fundamentais na forma como escrevemos código. Se você é desenvolvedor iOS ou macOS, precisa entender as novidades para não ficar para trás na indústria. Neste artigo, vamos analisar as principais mudanças do Swift 6 com exemplos práticos que podem ser aplicados imediatamente em projetos.



1. Enumerações não exaustivas (Non‑exhaustive enums)



Uma das mudanças mais esperadas — a possibilidade de declarar enumerações que podem ser expandidas no futuro sem quebrar a compatibilidade reversa. Antes, se uma biblioteca adicionasse um novo caso no enum, seu código quebrava. Agora isso é coisa do passado.



A declaração de tal enumeração é assim:



public enum NetworkError: Sendable {    case timeout    case serverError(Int)    case unknown    @_nonExhaustive case custom(String)}


Ao processar esse enum, o compilador não exige mais que o switch seja exaustivo. Você é obrigado a adicionar um default:



func handleError(_ error: NetworkError) {    switch error {    case .timeout:        print("Tempo esgotado")    case .serverError(let code):        print("Erro do servidor: \\(code)")    default:        print("Erro desconhecido")    }}


Dica prática: Se você desenvolve uma biblioteca pública ou SDK, marque seus enum com o atributo @_nonExhaustive — isso manterá a compatibilidade com versões futuras do seu código.



2. Macros: novo nível de metaprogramação



As macros, introduzidas no Swift 5.9, tornaram-se verdadeiramente poderosas em 2025. No Swift 6, surgiram macros de atributo e macros de membro, que permitem gerar código em tempo de compilação sem boilerplate desnecessário.



Vejamos um exemplo: em vez de escrever manualmente init e Codable para um modelo, você pode usar a macro embutida @MemberwiseInit (novidade do Swift 6):



@MemberwiseInitstruct UserProfile: Codable {    let id: Int    var name: String    var email: String    var age: Int}

// O compilador gera automaticamente:// init(id: Int, name: String, email: String, age: Int)// e a implementação de Codable


Outro exemplo é a macro #Predicate para SwiftData:



let youngUsers = try modelContext.fetch(    FetchDescriptor<UserProfile>(        predicate: #Predicate { $0.age < 25 }    ))


As macros reduzem significativamente a quantidade de código boilerplate e diminuem a probabilidade de erros. Em 2025, seu uso tornou-se padrão para novos projetos.



3. Propriedades observáveis (Observable) e SwiftUI



No Swift 6, surgiu um novo tipo Observable, que substituiu o ObservableObject do Combine. Agora não é mais necessário escrever @Published e @ObservedObject — tudo funciona através da macro @Observable.



Exemplo de modelo:



import Observation

@Observableclass CounterViewModel { var count = 0 var isPremium = false

func increment() { count += 1 if count >= 10 { isPremium = true } }}


O uso no SwiftUI ficou mais simples:



struct CounterView: View {    @State private var viewModel = CounterViewModel()

var body: some View { VStack { Text("Contagem: \\(viewModel.count)") Button("Aumentar") { viewModel.increment() } if viewModel.isPremium { Text("Premium disponível!") } } .padding() }}


O que mudou?

Blogs

Book Recommendations