0Pricing
Swift Academy · Lección

Actores, aislamiento de datos y nonisolated

Aprenda el aislamiento de actores: el estado se protege detrás de un actor , el acceso entre actores requiere await y los miembros nonisolated omiten el aislamiento cuando son puros o estáticos.

Actores, aislamiento de datos y nonisolated es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 3. 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 3 lecciones en total.

Qué ofrecen los actores

Un actor protege su estado mutable. Solo una tarea accede al estado aislado a la vez; los llamadores externos deben usar await en sus métodos.

  • Aislamiento = ausencia de carreras de datos
  • Las llamadas entre actores son asíncronas
  • nonisolated para miembros puros o estáticos

Conceptos básicos de los actores

Dentro del actor, el acceso es directo. Desde fuera, debe usar await tanto para leer como para escribir el estado aislado.

actor Counter {
    private var value: Int = 0   // isolated state

    func increment() { value += 1 }      // isolated method (async to outsiders)
    func get() -> Int { value }          // read isolated state
}

let c = Counter()
Task {
    await c.increment()
    print(await c.get())  // 1
}

Garantía de serialización

Incluso si varias tareas llaman simultáneamente, el actor serializa el acceso a su estado, evitando carreras.

actor BankAccount {
    private var balance: Int = 0
    func deposit(_ amount: Int) { balance += amount }
    func withdraw(_ amount: Int) -> Bool {
        if balance >= amount { balance -= amount; return true }
        return false
    }
    func current() -> Int { balance }
}

let acc = BankAccount()
Task {
    async let a = acc.deposit(50)
    async let b = acc.withdraw(20)
    _ = await (a, b)                 // operations are serialized inside the actor
    print(await acc.current())       // deterministic balance
}

API nonisolated

Marque como nonisolated los miembros puros o estáticos para que los llamadores no necesiten await. No deben acceder al estado aislado.

actor Clock {
    private var ticks: Int = 0
    func tick() { ticks += 1 }
    func read() -> Int { ticks }

    // Nonisolated: safe without awaiting (pure computation / constant)
    nonisolated static let format = "HH:mm:ss"

    nonisolated func describeFormat() -> String {
        // Cannot touch isolated state here; this is pure
        return "Format: " + Self.format
    }
}

let cl = Clock()
Task {
    await cl.tick()
    print(await cl.read())           // 1
    // Nonisolated members don't require await:
    print(Clock.format)              // "HH:mm:ss"
    print(cl.describeFormat())       // sync call
}

Consideraciones sobre la reentrancia

Los actores pueden ser reentrantes: después de un await dentro de un método de actor, pueden ejecutarse otros mensajes. Mantenga invariantes válidas en los puntos de await.

actor Logger {
    private var lines: [String] = []
    func log(_ s: String) async {
        lines.append(s)
        // Simulate an await point; actor may process other messages here (reentrant)
        try? await Task.sleep(nanoseconds: 10_000_000)
        lines.append("done")
    }
    func snapshot() -> [String] { lines }
}

let logger = Logger()
Task {
    async let a = logger.log("A")
    async let b = logger.log("B")
    _ = await (a, b)
    print(await logger.snapshot())   // order shows possible interleaving
}

Prácticas recomendadas

Pautas:

  • Exponga métodos async pequeños; evite secciones críticas largas.
  • Use nonisolated para constantes y helpers puros.
  • No almacene estado mutable compartido que no sea Sendable fuera de los actores (a continuación aprenderá Sendable).

Requisito de aislamiento de los actores

Comprobación rápida: ¿Cómo se lee o escribe el estado de un actor desde fuera?

Repaso

Repaso: Los actores aíslan el estado mutable; el acceso externo requiere await. Use nonisolated para miembros puros o estáticos y diseñe métodos asíncronos breves para mantener segura la reentrancia.

Preguntas frecuentes

¿La lección «Actores, aislamiento de datos y nonisolated» es gratis?

Sí — el texto completo de «Actores, aislamiento de datos y nonisolated» 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 3 lecciones en total.

¿Qué aprenderé en «Actores, aislamiento de datos y nonisolated»?

Aprenda el aislamiento de actores: el estado se protege detrás de un actor , el acceso entre actores requiere await y los miembros nonisolated omiten el aislamiento cuando son puros o estáticos. 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 2 de 3.

¿Cuánto tiempo toma la lección «Actores, aislamiento de datos y nonisolated»?

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. TaskGroup para el paralelismo
  2. Actores, aislamiento de datos y nonisolated
  3. Sendable y comprobación de seguridad de hilos
← Volver a Swift Academy