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
Mensagem pronta para colar
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-2Ou 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.mdConteú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,
extractStickerpermanece 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
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
api-and-interface-design
Ajuda a criar APIs e interfaces bem definidas. É útil ao projetar como diferentes partes de um software vão se comunicar.
addyosmani/agent-skills
mason
Ajuda seu agente a escrever código limpo e funcional. Ele segue as regras definidas para garantir que tudo funcione como esperado.
sickn33/agentic-awesome-skills
max
Faz seu agente melhorar o código existente sem mudar o que ele faz. Ele deixa o código mais fácil de ler e manter.
sickn33/agentic-awesome-skills