Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #125

swift-concurrency-6-2

Ajuda seu agente a usar as novas funcionalidades de concorrência do Swift 6.2. Ele permite executar tarefas em segundo plano de forma organizada e segura.

O que ela faz

Esta ferramenta ajuda a usar as novas funcionalidades de concorrência do Swift 6.2. Ela torna o código mais seguro, evitando erros comuns quando várias partes do programa tentam acessar as mesmas informações ao mesmo tempo, especialmente em tarefas que rodam em segundo plano.

Quando usar

  • ✓Ao migrar seu código Swift para a versão 6.2.
  • ✓Quando o compilador aponta erros de 'data race' (acesso inseguro a dados).
  • ✓Para organizar tarefas que precisam rodar em segundo plano sem travar o programa principal.

Exemplo do que pedir para a IA

“Como posso fazer uma tarefa demorada rodar em segundo plano com segurança no Swift 6.2?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/swift-concurrency-6-2/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/swift-concurrency-6-2/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O Swift 6.2 muda o comportamento padrão para que o código continue rodando onde foi chamado, a menos que você diga explicitamente para usar `@concurrent`. Isso evita que partes diferentes do código modifiquem dados ao mesmo tempo sem querer.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill swift-concurrency-6-2

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/swift-concurrency-6-2/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Swift 6.2 Concorrência Acessível

Padrões para adotar o modelo de concorrência do Swift 6.2, onde o código é executado em um único thread por padrão e a concorrência é introduzida explicitamente. Elimina erros comuns de data-race sem sacrificar o desempenho.

Quando Ativar

  • Migrando projetos Swift 5.x ou 6.0/6.1 para Swift 6.2
  • Resolvendo erros do compilador de segurança de data-race
  • Projetando arquitetura de aplicativos baseada em MainActor
  • Descarregando trabalho intensivo de CPU para threads em segundo plano
  • Implementando conformidades de protocolo em tipos isolados por MainActor
  • Habilitando as configurações de compilação de Concorrência Acessível no Xcode 26

Problema Central: Descarregamento Implícito em Segundo Plano

No Swift 6.1 e anteriores, funções assíncronas podiam ser descarregadas implicitamente para threads em segundo plano, causando erros de data-race mesmo em código aparentemente seguro:

// Swift 6.1: ERROR
@MainActor
final class StickerModel {
    let photoProcessor = PhotoProcessor()

    func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
        guard let data = try await item.loadTransferable(type: Data.self) else { return nil }

        // Error: Sending 'self.photoProcessor' risks causing data races
        return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
    }
}

O Swift 6.2 corrige isso: funções assíncronas permanecem no ator chamador por padrão.

// Swift 6.2: OK — async stays on MainActor, no data race
@MainActor
final class StickerModel {
    let photoProcessor = PhotoProcessor()

    func extractSticker(_ item: PhotosPickerItem) async throws -> Sticker? {
        guard let data = try await item.loadTransferable(type: Data.self) else { return nil }
        return await photoProcessor.extractSticker(data: data, with: item.itemIdentifier)
    }
}

Padrão Central — Conformidades Isoladas

Tipos MainActor agora podem conformar-se a protocolos não isolados com segurança:

protocol Exportable {
    func export()
}

// Swift 6.1: ERROR — crosses into main actor-isolated code
// Swift 6.2: OK with isolated conformance
extension StickerModel: @MainActor Exportable {
    func export() {
        photoProcessor.exportAsPNG()
    }
}

O compilador garante que a conformidade só seja usada no ator principal:

// OK — ImageExporter is also @MainActor
@MainActor
struct ImageExporter {
    var items: [any Exportable]

    mutating func add(_ item: StickerModel) {
        items.append(item)  // Safe: same actor isolation
    }
}

// ERROR — nonisolated context can't use MainActor conformance
nonisolated struct ImageExporter {
    var items: [any Exportable]

    mutating func add(_ item: StickerModel) {
        items.append(item)  // Error: Main actor-isolated conformance cannot be used here
    }
}

Padrão Central — Variáveis Globais e Estáticas

Proteja estado global/estático com MainActor:

// Swift 6.1: ERROR — non-Sendable type may have shared mutable state
final class StickerLibrary {
    static let shared: StickerLibrary = .init()  // Error
}

// Fix: Annotate with @MainActor
@MainActor
final class StickerLibrary {
    static let shared: StickerLibrary = .init()  // OK
}

Modo de Inferência Padrão do MainActor

O Swift 6.2 introduz um modo onde o MainActor é inferido por padrão — nenhuma anotação manual é necessária:

// With MainActor default inference enabled:
final class StickerLibrary {
    static let shared: StickerLibrary = .init()  // Implicitly @MainActor
}

final class StickerModel {
    let photoProcessor: PhotoProcessor
    var selection: [PhotosPickerItem]  // Implicitly @MainActor
}

extension StickerModel: Exportable {  // Implicitly @MainActor conformance
    func export() {
        photoProcessor.exportAsPNG()
    }
}

Este modo é opt-in e recomendado para aplicativos, scripts e outros destinos executáveis.

Padrão Central — @concurrent para Trabalho em Segundo Plano

Quando você precisar de paralelismo real, descarregue explicitamente com @concurrent:

Importante: Este exemplo requer as configurações de compilação de Concorrência Acessível — SE-0466 (isolamento padrão do MainActor) e SE-0461 (NonisolatedNonsendingByDefault). Com essas configurações habilitadas, extractSticker permanece no ator do chamador, tornando o acesso a estado mutável seguro. Sem essas configurações, este código tem um data race — o compilador o sinalizará.

nonisolated final class PhotoProcessor {
    private var cachedStickers: [String: Sticker] = [:]

    func extractSticker(data: Data, with id: String) async -> Sticker {
        if let sticker = cachedStickers[id] {
            return sticker

…
Perguntas frequentes

O que é 'data race'?

É um erro que acontece quando duas ou mais partes do seu programa tentam ler e escrever na mesma informação ao mesmo tempo, causando resultados imprevisíveis ou travamentos.

O que significa 'single-threaded by default'?

Significa que, por padrão, o código roda em uma única linha de execução, como uma fila. Isso torna mais fácil evitar os erros de 'data race', pois apenas uma coisa acontece por vez.

O que é `@concurrent`?

É uma instrução especial que você usa para dizer ao Swift que uma função específica deve rodar em segundo plano, em outra linha de execução, para não atrapalhar o fluxo principal do programa.

Detalhes

Descrição original do autor

Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types. Use when adopting Swift 6.2 concurrency — offloading with @concurrent or resolving main-actor isolation.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#125
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas