MO
Cria uma nova Model (struct) seguindo os padroes MVVM do projeto SwiftUI. Use quando o usuario pedir para criar um novo modelo, entidade ou struct de dados.
Install
mkdir -p .claude/skills/model-andrelucassvt && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/14273" && unzip -o skill.zip -d .claude/skills/model-andrelucassvt && rm skill.zipInstalls to .claude/skills/model-andrelucassvt
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Cria uma nova Model (struct) seguindo os padroes MVVM do projeto SwiftUI. Use quando o usuario pedir para criar um novo modelo, entidade ou struct de dados.156 charsno explicit “when” trigger
About this skill
Crie uma nova Model SwiftUI seguindo os padroes MVVM do projeto.
Argumentos
Nome da Model em PascalCase: $ARGUMENTS
Se $ARGUMENTS estiver vazio, pergunte: "Qual o nome da Model? (ex: Product, Order, Address)"
Pergunte ao usuario:
- Quais propriedades a Model deve ter? (nome e tipo de cada uma)
- A API retorna nomes diferentes das propriedades Swift? (snake_case, etc.) — padrao: sim, usar
CodingKeys - Precisa de dados mockados para Preview? (padrao: sim)
O que criar
Crie os arquivos no diretorio Models/:
1. Models/<PascalCase>.swift
import Foundation
struct <PascalCase>: Codable, Identifiable, Equatable {
let id: String
// Propriedades informadas pelo usuario
enum CodingKeys: String, CodingKey {
case id
// Mapeamentos snake_case -> camelCase conforme necessario
}
}
Regras da Model:
- Sempre
struct, nuncaclass - Propriedades sempre
let(imutavel) — usevarapenas se houver necessidade explicita de mutacao - Conformar com
Codable,IdentifiableeEquatableno minimo - Adicionar
Hashablese a Model for usada emForEachsem keypath,Set, ou como valor deNavigationLink - Sem logica de negocio — apenas dados
- Sem
import SwiftUI— apenasimport Foundation - Usar
CodingKeysquando qualquer propriedade da API usar nomenclatura diferente (ex:snake_case) - Propriedades opcionais (
?) para campos que podem virnullda API - Usar tipos adequados:
URLpara URLs,Datepara datas,Decimalpara valores monetarios id: UUIDpara objetos criados localmente;id: Stringouid: Intpara objetos vindos de API
2. Preview Content/PreviewData+<PascalCase>.swift (se solicitado)
Extension com dados mockados para uso em Previews:
import Foundation
extension <PascalCase> {
static let mock = <PascalCase>(
id: "1",
// Dados mockados realistas
)
static let mockList: [<PascalCase>] = [
.mock,
<PascalCase>(
id: "2",
// Segundo item mockado
),
<PascalCase>(
id: "3",
// Terceiro item mockado
),
]
}
Apos criar os arquivos
Informe o usuario sobre os proximos passos comuns:
- Criar o Repository correspondente em
Repositories/<PascalCase>Repository.swiftcom protocolo + implementacao - Criar o ViewModel que consome essa Model em
ViewModels/ - Criar a View que exibe essa Model em
Views/ - Se a Model tiver
Date, garantir que oJSONDecoderusa.iso8601comodateDecodingStrategy
Regras
- Sem
import SwiftUI— apenasimport Foundation - Structs imutaveis com
let— nuncaclassouvarsem necessidade - Conformar com
Codable,Identifiable,Equatableno minimo - Usar
CodingKeysquando a API retorna nomes diferentes (snake_case -> camelCase) - Propriedades opcionais para campos que podem ser
null - Dados mockados devem ser realistas e variados
- Nao adicionar metodos de logica de negocio na Model
- Usar tipos Swift adequados (
URL,Date,Decimal) ao inves deStringgenerico id: UUIDpara objetos criados localmente;id: Stringouid: Intpara objetos de API
Checklist de Revisao
-
structimutavel comlet(nuncaclass) - Conforma com
Codable,Identifiable,Equatableno minimo -
Hashableadicionado se usada emSet,ForEachsem keypath, ouNavigationLink(value:) - Sem
import SwiftUI— apenasimport Foundation - Sem logica de negocio — apenas dados
-
CodingKeyspresente quando a API usa nomes diferentes das propriedades Swift - Campos opcionais (
?) para propriedades que podem sernull - Tipos corretos:
URL,Date,Decimalao inves deStringgenerico -
PreviewDatacriado commockemockListcom dados realistas e variados