swiftui-view-refactor
Ajuda seu agente a organizar o código de interfaces visuais. Ele divide partes grandes em pedaços menores e mais fáceis de entender. Isso torna o código mais limpo e organizado.
O que ela faz
Esta ferramenta ajuda a organizar seu código SwiftUI, dividindo telas grandes em partes menores e mais fáceis de gerenciar. Ela garante que os dados fluam de forma clara e previsível.
Quando usar
- ✓Quando uma tela no seu aplicativo SwiftUI fica muito longa e confusa.
- ✓Ao precisar criar partes reutilizáveis de uma tela.
- ✓Para tornar o fluxo de dados do seu aplicativo mais claro e fácil de entender.
Exemplo do que pedir para a IA
“Por favor, refatore esta tela SwiftUI para que ela seja dividida em componentes menores e mais organizados.”
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
A ferramenta analisa sua tela SwiftUI e sugere como dividi-la em componentes menores. Ela também ajuda a garantir que os dados sejam passados de forma organizada entre esses componentes.
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 sickn33/agentic-awesome-skills --skill swiftui-view-refactorOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/swiftui-view-refactor/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.
Refatoração de Views SwiftUI
Visão Geral
Refatore views SwiftUI para tipos de view pequenos, explícitos e estáveis. Use SwiftUI puro por padrão: estado local na view, dependências compartilhadas no ambiente, lógica de negócios em serviços/modelos e view models apenas quando a requisição ou o código existente claramente exigirem uma.
Quando Usar
- Ao limpar uma view SwiftUI grande ou dividir implementações longas de
body. - Quando você precisa de subviews menores, injeção explícita de dependência ou melhor uso de Observation.
Diretrizes Principais
1) Ordem das Views (de cima para baixo)
- Aplique esta ordem, a menos que o arquivo existente tenha uma convenção local mais forte que você precise preservar.
- Ambiente
private/publiclet@State/ outras propriedades armazenadasvarcomputadas (não-view)initbody- builders de view computados / outros helpers de view
- funções helper / async
2) Prefira MV, não MVVM
- Views devem ser expressões de estado leves e pontos de orquestração, não contêineres para lógica de negócios.
- Prefira
@State,@Environment,@Query,.task,.task(id:)eonChangeantes de recorrer a uma view model. - Injete serviços e modelos compartilhados via
@Environment; mantenha a lógica de domínio em serviços/modelos, não no corpo da view. - Não introduza uma view model apenas para espelhar o estado local da view ou envolver dependências do ambiente.
- Se uma tela estiver ficando grande, divida a UI em subviews antes de inventar uma nova camada de view model.
3) Prefira fortemente tipos de subview dedicados em vez de helpers some View computados
- Marque propriedades
bodyque são mais longas que aproximadamente uma tela ou contêm múltiplas seções lógicas. - Prefira extrair tipos
Viewdedicados para seções não triviais, especialmente quando elas têm estado, trabalho assíncrono, ramificações ou merecem sua própria preview. - Mantenha helpers
some Viewcomputados raros e pequenos. Não construa uma tela inteira a partir de fragmentos no estiloprivate var header: some View. - Passe entradas pequenas e explícitas (dados, bindings, callbacks) para subviews extraídas em vez de passar todo o estado pai.
- Se uma subview extraída se tornar reutilizável ou significativamente independente, mova-a para seu próprio arquivo.
Prefira:
var body: some View {
List {
HeaderSection(title: title, subtitle: subtitle)
FilterSection(
filterOptions: filterOptions,
selectedFilter: $selectedFilter
)
ResultsSection(items: filteredItems)
FooterSection()
}
}
private struct HeaderSection: View {
let title: String
let subtitle: String
var body: some View {
VStack(alignment: .leading, spacing: 6) {
Text(title).font(.title2)
Text(subtitle).font(.subheadline)
}
}
}
private struct FilterSection: View {
let filterOptions: [FilterOption]
@Binding var selectedFilter: FilterOption
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(filterOptions, id: \.self) { option in
FilterChip(option: option, isSelected: option == selectedFilter)
.onTapGesture { selectedFilter = option }
}
}
}
}
}
Evite:
var body: some View {
List {
header
filters
results
footer
}
}
private var header: some View {
VStack(alignment: .leading, spacing: 6) {
Text(title).font(.title2)
Text(subtitle).font(.subheadline)
}
}
3b) Extraia ações e efeitos colaterais de body
- Não mantenha ações de botão não triviais inline no corpo da view.
- Não enterre lógica de negócios dentro de
.task,.onAppear,.onChangeou.refreshable. - Prefira chamar pequenos métodos privados da view e mova a lógica de negócios real para serviços/modelos.
- O corpo deve ser lido como UI, não como um view controller.
Button("Save", action: save)
.disabled(isSaving)
.task(id: searchText) {
await reload(for: searchText)
}
private func save() {
Task { await saveAsync() }
}
private func reload(for searchText: String) async {
guard !searchText.isEmpty else {
results = []
return
}
await searchService.search(searchText)
}
4) Mantenha uma árvore de views estável (evite troca condicional de views de nível superior)
- Evite
bodyou views computadas que retornam branches raiz completamente diferentes viaif/else.
…
Perguntas frequentes
Por que dividir telas grandes?
Telas grandes são difíceis de ler, manter e depurar. Dividi-las em partes menores torna o código mais organizado e fácil de trabalhar.
O que significa 'fluxo de dados explícito'?
Significa que fica claro de onde os dados vêm e para onde vão, tornando o código mais previsível e menos propenso a erros.
Preciso usar 'view models'?
Não necessariamente. A ferramenta prefere usar outras formas de organizar o código antes de introduzir 'view models', a menos que seja realmente necessário.
Detalhes
Descrição original do autor
Refactor SwiftUI views into smaller components with stable, explicit data flow.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #4301
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
angular-developer
Ajuda seu agente a criar código Angular e a dar conselhos sobre a estrutura do projeto. É útil para iniciar novos projetos, criar partes do código ou melhorar a performance e acessibilidade.
affaan-m/ECC
frontend-a11y
Ajuda seu agente a tornar interfaces web acessíveis para todos. Ele garante que sites e apps funcionem bem com leitores de tela e navegação por teclado.
affaan-m/ECC
frontend-patterns
Faz seu agente aplicar padrões modernos no desenvolvimento frontend. Ele otimiza performance, gerencia estado e segue boas práticas em React e Next.js.
affaan-m/ECC