0Pricing
Swift Academy · Lección

Migración a la concurrencia estricta

Adopte gradualmente la comprobación de concurrencia de Swift 6.

Migración a la concurrencia estricta es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué es la concurrencia estricta?

La comprobación estricta de concurrencia hace que el compilador diagnostique cada posible carrera de datos en tiempo de compilación.

En el modo de lenguaje Swift 6 está activada de forma predeterminada; en el modo Swift 5 se activa progresivamente.

Los tres niveles de comprobación

La opción -strict-concurrency tiene tres niveles: minimal (predeterminado en Swift 5), targeted (comprueba el código que ya usa concurrencia) y complete (comprobación completa al estilo de Swift 6).

// Build settings example
// SWIFT_STRICT_CONCURRENCY = complete

Adopción progresiva

La ruta recomendada es avanzar gradualmente por los niveles: comience con targeted, corrija las advertencias y después pase a complete antes de cambiar el modo de lenguaje a 6.

Esto hace que la migración sea manejable en bases de código grandes.

// Step 1: targeted
// Step 2: complete (warnings)
// Step 3: Swift 6 mode (errors)

Migración por módulo

La concurrencia estricta se configura por destino. Puede migrar un módulo cada vez y dejar los demás en el modo Swift 5 hasta que estén preparados.

// Package.swift target
// swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]

Advertencia común: captura de valores no Sendable

El diagnóstico más frecuente consiste en capturar un valor que no es Sendable en una Task o enviarlo a través del límite de un actor.

Corríjalo haciendo que el tipo sea Sendable o copiando únicamente los datos que sean Sendable.

final class Model { var name = "" }
func start(_ m: Model) {
    // Warning: non-Sendable Model captured by Task
    // Task { print(m.name) }
}

Corrección mediante tipos de valor

A menudo, la solución más clara es modelar los datos como un tipo de valor inmutable, que obtiene Sendable automáticamente.

struct Model: Sendable { let name: String }
func start(_ m: Model) {
    Task { print(m.name) } // safe now
}

Corrección mediante @MainActor

Los tipos de interfaz de usuario suelen generar advertencias porque se accede a ellos desde tareas en segundo plano. Anotar el tipo con @MainActor lo vincula al hilo principal y resuelve las advertencias.

@MainActor
final class ViewModel {
    var items: [String] = []
    func reload() async {
        let fetched = await load()
        items = fetched
    }
}
func load() async -> [String] { [] }

Conformidad con Sendable para tipos existentes

Para los tipos que controla y que ya son seguros para subprocesos, añada explícitamente la conformidad con Sendable o @unchecked Sendable para silenciar las advertencias de forma honesta.

import Foundation
final class Counter: @unchecked Sendable {
    private let lock = NSLock()
    private var n = 0
}

Importaciones con preconcurrency

Cuando una dependencia aún no ha anotado su API, @preconcurrency import relaja la comprobación de ese módulo y degrada los errores a advertencias hasta que se actualice.

@preconcurrency import SomeLegacyFramework

Marcar símbolos con @preconcurrency

También puede marcar declaraciones individuales con @preconcurrency para que los llamadores de código antiguo no reciban errores al añadir requisitos de Sendable.

@preconcurrency
func handle(_ value: Sendable) { }

Verificación de la migración

Cuando la comprobación complete produzca cero advertencias, cambie el destino al modo Swift 6 para que las garantías se conviertan en errores obligatorios y no puedan desaparecer.

// Package.swift
// .target(name: "App", swiftSettings: [.swiftLanguageMode(.v6)])

Comprobación rápida: migración

Ponga a prueba su comprensión de la migración a la concurrencia estricta.

Repaso: migración a la concurrencia estricta

La comprobación estricta de concurrencia traslada la detección de carreras de datos al tiempo de compilación, con los niveles minimal, targeted y complete. Migre por módulo, corrija las capturas no Sendable mediante tipos de valor, @MainActor o una conformidad honesta con Sendable, y use @preconcurrency para facilitar la interoperabilidad con dependencias aún no migradas.

Cuando complete no produzca advertencias, active el modo Swift 6 para consolidar las garantías.

Preguntas frecuentes

¿La lección «Migración a la concurrencia estricta» es gratis?

Sí — el texto completo de «Migración a la concurrencia estricta» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Migración a la concurrencia estricta»?

Adopte gradualmente la comprobación de concurrencia de Swift 6. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Migración a la concurrencia estricta»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El problema de las condiciones de carrera
  2. El protocolo Sendable
  3. Aislamiento de actores y nonisolated
  4. Migración a la concurrencia estricta
← Volver a Swift Academy