Swift Academy · Aula

Funções das macros: independentes e anexadas

Compreenda macros #expression e as funções de macros @attached peer/member/accessor.

Aula 1 de 413 etapas

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 = 2

Macros 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 code

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

Grátis para começar

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

  1. Funções das macros: independentes e anexadas
  2. Como escrever uma macro de expressão independente
  3. Macros de membros anexadas para reduzir código repetitivo
  4. Testes e depuração de macros
← Voltar para Swift Academy