Cuando gestionas la sincronización manualmente (lock, dispatch queue) y puedes garantizar la seguridad, usa @unchecked Sendable para indicarle al compilador que confíe en tu código:
final class StoreSegura: @unchecked Sendable {
private let lock = NSLock()
private var _valor = 0
var valor: Int {
lock.lock(); defer { lock.unlock() }
return _valor
}
}
Data races en Swift 6
Con Swift 6 y SWIFT_STRICT_CONCURRENCY = complete, el compilador detecta data races potenciales en tiempo de compilación. La estrategia de migración recomendada es: empezar con un proyecto nuevo en Swift 6, o habilitar la verificación módulo a módulo en proyectos existentes.
