L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

swift-concurrency

swift-concurrency

Implement async/await, Actors, and structured concurrency in Swift. Use when implementing Swift async/await, Actors, or structured concurrency in iOS/macOS.

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: swift-concurrency description: Implement async/await, Actors, and structured concurrency in Swift. Use when implementing Swift async/await, Actors, or structured concurrency in iOS/macOS. metadata: triggers: files: - '**/*.swift' keywords: - async - await - actor - Swift concurrency Task - Swift Task - MainActor

Swift Concurrency

Priority: P0 (CRITICAL)

Write Structured Async Code

  • Async Functions: Mark with async and call with await.
  • async let: Use async let for parallel execution when multiple tasks independent.
  • Task Groups: Use withTaskGroup or withThrowingTaskGroup for spawning dynamic number of tasks.
  • Error Handling: Combine with throws. Always handle CancellationError.

See implementation examples for parallel fetch with async let and Task Groups.

Isolate State with Actors

  • Data Isolation: Use actor for shared mutable state to avoid data races.
  • @MainActor: Annotate UI classes (Views, ViewModels) with @MainActor for main thread execution. Use MainActor.run { ... } for inline UI updates in async blocks.
  • Global Actors: Use @GlobalActor for specific thread-bound resources.
  • nonisolated: Use nonisolated for methods that don't access actor state to avoid unnecessary hops.

See implementation examples for Actor-based state isolation and nonisolated methods.

Manage Task Lifecycle

  • Task Hierarchy: Inherit isolation by using Task { ... }.
  • Cancellation: Explicitly check Task.isCancelled in long loops. Use try Task.checkCancellation() for throwing functions.
  • Detached Tasks: Avoid Task.detached unless you explicitly want to break context inheritance.

Anti-Patterns

  • No synchronous work in @MainActor: not block main thread.
  • No UI updates off @MainActor: Always dispatch back to main via MainActor.
  • No ignored cancellation: Always check and propagate cancellation.

References

Skills enregistrées