Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #4301

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/swiftui-view-refactor/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/swiftui-view-refactor/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-refactor

Ou 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.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.

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/public let
  • @State / outras propriedades armazenadas
  • var computadas (não-view)
  • init
  • body
  • 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:) e onChange antes 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 body que são mais longas que aproximadamente uma tela ou contêm múltiplas seções lógicas.
  • Prefira extrair tipos View dedicados 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 View computados raros e pequenos. Não construa uma tela inteira a partir de fragmentos no estilo private 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, .onChange ou .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 body ou views computadas que retornam branches raiz completamente diferentes via if/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.

repo: sickn33/agentic-awesome-skills

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas