Ruoli delle macro: freestanding e attached
Comprendere le macro #expression e i ruoli delle macro @attached peer/member/accessor.
Ruoli delle macro: freestanding e attached è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Che cosa sono le macro Swift?
Le macro Swift espandono il codice sorgente al momento della compilazione, generando automaticamente il codice ripetitivo senza costi a runtime.
// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }Macro di espressione freestanding
Le macro di espressione freestanding iniziano con # e producono un valore o eseguono un effetto collaterale.
// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"Macro di dichiarazione freestanding
Le macro di dichiarazione freestanding emettono nuove dichiarazioni, ad esempio funzioni e variabili, nel punto in cui vengono usate.
// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2Macro attached di tipo member
Le macro attached @member aggiungono nuove proprietà stored o computed, un init o metodi al tipo a cui sono associate.
@AddID
struct User { var name: String }
// Expands to: var id = UUID()Macro attached di tipo accessor
Le macro attached @accessor generano le implementazioni di getter e setter per le proprietà stored.
struct Point {
@Clamped(0...100)
var x: Int = 0
// accessor macro generates get/set with clamping
}Macro attached di tipo peer
Le macro peer aggiungono dichiarazioni sorelle accanto alla dichiarazione a cui sono associate.
class Service {
@AddAsync
func fetchSync(completion: @escaping (Data)->Void) { ... }
// peer macro adds: func fetch() async -> Data
}Macro attached di tipo conformance
Le macro conformance aggiungono le conformità ai protocolli e le implementazioni richieste a un tipo.
@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }Macro attached di tipo extension
Le macro extension generano interi blocchi di estensione per un tipo e sono utili per aggiungere implementazioni complesse di protocolli.
@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }L'espansione delle macro avviene in fase di compilazione
Tutte le espansioni delle macro avvengono durante la compilazione: non c'è alcun costo a runtime e il codice espanso è visibile in Xcode.
// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source codeDichiarare una macro
Le macro vengono dichiarate in un target macro separato usando l'attributo @freestanding o @attached.
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
= #externalMacro(module: "MyMacros", type: "StringifyMacro")Riepilogo dei ruoli delle macro
Freestanding: #expression, #declaration. Attached: @member, @accessor, @peer, @conformance, @extension.
// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }Verifica rapida
Quale ruolo di macro aggiunge nuovi member, come proprietà o init, al tipo che decora?
Riepilogo della lezione
Le macro freestanding (#name) producono valori o dichiarazioni. Le macro attached (@name) estendono i tipi con member, accessor, peer, conformità o extension. Tutte le espansioni avvengono al momento della compilazione.
Impara Swift con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 122
- Lezioni
- 409
Domande Frequenti
La lezione «Ruoli delle macro: freestanding e attached» è gratuita?
Sì — il testo completo di «Ruoli delle macro: freestanding e attached» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Ruoli delle macro: freestanding e attached»?
Comprendere le macro #expression e i ruoli delle macro @attached peer/member/accessor. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Ruoli delle macro: freestanding e attached»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ruoli delle macro: freestanding e attached
- Scrivere una macro di espressione freestanding
- Macro attached member per ridurre il boilerplate
- Test e debug delle macro