Funções das macros: independentes e anexadas
Compreenda macros #expression e as funções de macros @attached peer/member/accessor.
Funções das macros: independentes e anexadas é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
O que são macros do Swift?
As macros do Swift expandem o código-fonte em tempo de compilação, gerando código repetitivo automaticamente sem sobrecarga em tempo de execução.
// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }Macros de expressão independentes
Macros de expressão independentes começam com # e produzem um valor ou executam um efeito colateral.
// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"Macros de declaração independentes
Macros de declaração independentes emitem novas declarações, como funções e variáveis, no local em que são usadas.
// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2Macros anexadas de membros
Macros anexadas @member adicionam novas propriedades armazenadas ou calculadas, inicializadores ou métodos ao tipo ao qual estão anexadas.
@AddID
struct User { var name: String }
// Expands to: var id = UUID()Macros anexadas de acessores
Macros anexadas @accessor geram implementações de leitura e atribuição para propriedades armazenadas.
struct Point {
@Clamped(0...100)
var x: Int = 0
// accessor macro generates get/set with clamping
}Macros anexadas de declarações irmãs
Macros de declarações irmãs adicionam declarações irmãs ao lado da declaração à qual estão anexadas.
class Service {
@AddAsync
func fetchSync(completion: @escaping (Data)->Void) { ... }
// peer macro adds: func fetch() async -> Data
}Macros anexadas de conformidade
Macros de conformidade adicionam conformidades de protocolo e as implementações necessárias a um tipo.
@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }Macros anexadas de extensão
Macros de extensão geram blocos de extensão completos para um tipo, sendo úteis para adicionar implementações complexas de protocolos.
@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }A expansão de macros ocorre em tempo de compilação
Todas as expansões de macros ocorrem durante a compilação — não há custo em tempo de execução, e o código expandido fica visível no Xcode.
// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source codeDeclarando uma macro
As macros são declaradas em um destino separado de macros usando o atributo @freestanding ou @attached.
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
= #externalMacro(module: "MyMacros", type: "StringifyMacro")Resumo dos papéis das macros
Independentes: #expression, #declaration. Anexadas: @member, @accessor, @peer, @conformance, @extension.
// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }Verificação rápida
Qual papel de macro adiciona novos membros, como propriedades ou inicializadores, ao tipo que ele anota?
Recapitulação da lição
Macros independentes (#name) produzem valores ou declarações. Macros anexadas (@name) aprimoram tipos com membros, acessores, declarações irmãs, conformidades ou extensões. Toda expansão ocorre em tempo de compilação.
Aprenda Swift com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 122
- Aulas
- 409
Perguntas Frequentes
A aula “Funções das macros: independentes e anexadas” é grátis?
Sim — o texto completo de “Funções das macros: independentes e anexadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Funções das macros: independentes e anexadas”?
Compreenda macros #expression e as funções de macros @attached peer/member/accessor. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Funções das macros: independentes e anexadas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções das macros: independentes e anexadas
- Como escrever uma macro de expressão independente
- Macros de membros anexadas para reduzir código repetitivo
- Testes e depuração de macros