Swift en 2025: resumen de novedades y ejemplos prácticos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Swift en 2025: ¿qué hay de nuevo en la práctica?



2025 ha sido un año emblemático para el ecosistema de Apple. Se lanzó Swift 6, una versión que promete no solo estabilidad, sino también cambios fundamentales en la forma en que escribimos código. Si eres desarrollador de iOS o macOS, necesitas comprender las novedades para no quedarte atrás en la industria. En este artículo, analizaremos los cambios clave de Swift 6 con ejemplos prácticos que puedes aplicar de inmediato en tus proyectos.



1. Enumeraciones no exhaustivas (Non‑exhaustive enums)



Uno de los cambios más esperados es la posibilidad de declarar enumeraciones que puedan ampliarse en el futuro sin romper la compatibilidad hacia atrás. Antes, si una biblioteca añadía un nuevo caso en un enum, tu código se rompía. Ahora eso es cosa del pasado.



La declaración de dicha enumeración se ve así:



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


Al manejar este enum, el compilador ya no exige que el switch sea exhaustivo. Debes agregar un default:



func handleError(_ error: NetworkError) {    switch error {    case .timeout:        print("Tiempo de espera agotado")    case .serverError(let code):        print("Error del servidor: \\(code)")    default:        print("Error desconocido")    }}


Consejo práctico: Si desarrollas una biblioteca pública o un SDK, marca tus enum con el atributo @_nonExhaustive; esto mantendrá la compatibilidad con versiones futuras de tu código.



2. Macros: un nuevo nivel de metaprogramación



Las macros, introducidas en Swift 5.9, se han vuelto verdaderamente potentes en 2025. En Swift 6 aparecieron las macros de atributo y las macros de miembro, que permiten generar código en tiempo de compilación sin necesidad de escribir código repetitivo.



Veamos un ejemplo: en lugar de escribir manualmente init y Codable para un modelo, puedes usar la macro incorporada @MemberwiseInit (novedad de Swift 6):



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

// El compilador genera automáticamente:// init(id: Int, name: String, email: String, age: Int)// y la implementación de Codable


Otro ejemplo es la macro #Predicate para SwiftData:



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


Las macros reducen significativamente la cantidad de código repetitivo y disminuyen la probabilidad de errores. En 2025, su uso se ha convertido en el estándar para los nuevos proyectos.



3. Propiedades observables (Observable) y SwiftUI



En Swift 6 apareció el nuevo tipo Observable, que reemplaza a ObservableObject de Combine. Ahora ya no es necesario escribir @Published y @ObservedObject; todo funciona a través de la macro @Observable.



Ejemplo de modelo:



import Observation

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

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


Su uso en SwiftUI se ha simplificado:



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

var body: some View { VStack { Text("Contador: \\(viewModel.count)") Button("Incrementar") { viewModel.increment() } if viewModel.isPremium { Text("¡Premium disponible!") } } .padding() }}


¿Qué cambió?

Blogs

Book Recommendations