| name | model |
| description | 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. |
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
enum CodingKeys: String, CodingKey {
case id
}
}
Regras da Model:
- Sempre
struct, nunca class
- Propriedades sempre
let (imutavel) — use var apenas se houver necessidade explicita de mutacao
- Conformar com
Codable, Identifiable e Equatable no minimo
- Adicionar
Hashable se a Model for usada em ForEach sem keypath, Set, ou como valor de NavigationLink
- Sem logica de negocio — apenas dados
- Sem
import SwiftUI — apenas import Foundation
- Usar
CodingKeys quando qualquer propriedade da API usar nomenclatura diferente (ex: snake_case)
- Propriedades opcionais (
?) para campos que podem vir null da API
- Usar tipos adequados:
URL para URLs, Date para datas, Decimal para valores monetarios
id: UUID para objetos criados localmente; id: String ou id: Int para 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",
)
static let mockList: [<PascalCase>] = [
.mock,
<PascalCase>(
id: "2",
),
<PascalCase>(
id: "3",
),
]
}
Apos criar os arquivos
Informe o usuario sobre os proximos passos comuns:
- Criar o Repository correspondente em
Repositories/<PascalCase>Repository.swift com 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 o JSONDecoder usa .iso8601 como dateDecodingStrategy
Regras
- Sem
import SwiftUI — apenas import Foundation
- Structs imutaveis com
let — nunca class ou var sem necessidade
- Conformar com
Codable, Identifiable, Equatable no minimo
- Usar
CodingKeys quando 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 de String generico
id: UUID para objetos criados localmente; id: String ou id: Int para objetos de API
Checklist de Revisao