/* Page prose (es) */
"NonSendableProblem" = "# Por qué una clase mutable no es Sendable, y cómo arreglarlo\n\nAhora el caso que todo el protocolo existe para atrapar. Imagina un marcador compartido para el conteo diario de pedidos de la cafetería: una clase, porque queremos un solo objeto que todos actualicen:\n\n```swift\nfinal class OrderCount {\n    var total = 0\n}\n\nlet orders = OrderCount()\n\n// Hand the shared object to work running off the main actor:\nTask.detached {\n    orders.total += 1   // will not compile in Swift 6\n}\nprint(orders.total)\n```\n\nEn el modo de lenguaje de Swift 6 esto **no compila.** El error es: *\"non-Sendable type 'OrderCount' of let 'orders' cannot exit main actor-isolated context\"*, con una nota de que `OrderCount` *\"does not conform to the `Sendable` protocol.\"* El compilador ve una clase mutable a punto de ser entregada a otro dominio de aislamiento y te detiene, *antes* de que la carrera pueda ocurrir siquiera. Ese es el cambio respecto al modelo clásico: la carrera de datos del capítulo [Riesgos de la concurrencia](Concurrency%20Hazards.playgroundchapter/Overview) era una sorpresa en tiempo de ejecución sobre la que tenías que razonar; aquí es un error de compilación que no puedes pasar por alto.\n\n* callout(Pruébalo): Imagina cambiar el `Task.detached` de arriba por una `Task { }` simple. ¿Compilaría el código? (Sí lo haría; el siguiente callout explica por qué.)\n\n* callout(Por qué esto compila): El código de nivel superior, como una página de Playground, se ejecuta *en el main actor*. Una `Task { }` simple **hereda** ese aislamiento del main actor, así que el objeto nunca abandona su dominio y el código de hecho compila. `Task.detached` se ejecuta *fuera* del main actor, y ese cruce de frontera es lo que hace inseguro compartir una clase mutable. La lección: el peligro aparece cuando el estado mutable **cruza entre** dominios, así que ahí es donde el compilador pone el cable trampa.\n\nTienes tres formas honestas de arreglarlo:\n\n**1. Conviértela en un actor** (mejor cuando el estado debe seguir siendo mutable y compartido):";
"NonSendableFixes" = "Los actores son Sendable automáticamente; ese es su trabajo. Compartir uno siempre es seguro porque el actor serializa cada acceso.\n\n**2. Hazla inmutable** (mejor cuando el valor nunca cambia tras su creación):\n\n```swift\nfinal class FrozenReceipt: Sendable {\n    let id: Int\n    let total: Int\n    init(id: Int, total: Int) {\n        self.id = id\n        self.total = total\n    }\n}\n```\n\n`final` + todo-`let` + miembros Sendable = una clase que puedes compartir con seguridad, porque no hay nada que mutar.\n\n**3. Aíslala a un actor** (incluido `@MainActor`):\n\nEtiqueta el tipo con un actor global para que todo el acceso ya se canalice a través de un dominio, que es exactamente lo que hacía `BalanceDisplay` antes.\n\nTambién hay una vía de escape, `@unchecked Sendable`, donde *tú* prometes que el tipo es seguro (digamos, protege su propio estado con un cerrojo) y el compilador acepta tu palabra. Trátala como último recurso: todo el sentido de este capítulo es dejar que el compilador haga la comprobación, no apagarla.\n\n[Anterior](@previous)  |  página 8 de 11  |  [Siguiente: Clausuras Sendable](@next)";
