Role makr: freestanding a attached
Poznanie makr #expression oraz ról makr @attached peer/member/accessor.
Role makr: freestanding a attached to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Czym są makra Swift?
Makra Swift rozwijają kod źródłowy podczas kompilacji, automatycznie generując kod powtarzalny bez narzutu w czasie wykonywania.
// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }Wolnostojące makra wyrażeń
Wolnostojące makra wyrażeń rozpoczynają się od # i generują wartość lub powodują efekt uboczny.
// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"Wolnostojące makra deklaracji
Wolnostojące makra deklaracji generują nowe deklaracje, na przykład funkcje i zmienne, w miejscu użycia.
// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2Dołączane makra członkowskie
Dołączane makra @member dodają nowe właściwości przechowywane lub obliczane, init albo metody do typu, do którego są dołączone.
@AddID
struct User { var name: String }
// Expands to: var id = UUID()Dołączane makra akcesorów
Dołączane makra @accessor generują implementacje getterów i setterów dla właściwości przechowywanych.
struct Point {
@Clamped(0...100)
var x: Int = 0
// accessor macro generates get/set with clamping
}Dołączane makra sąsiednich deklaracji
Makra sąsiednich deklaracji dodają deklaracje równorzędne obok deklaracji, do której są dołączone.
class Service {
@AddAsync
func fetchSync(completion: @escaping (Data)->Void) { ... }
// peer macro adds: func fetch() async -> Data
}Dołączane makra zgodności z protokołami
Makra zgodności dodają do typu zgodności z protokołami oraz wymagane implementacje.
@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }Dołączane makra rozszerzeń
Makra rozszerzeń generują całe bloki rozszerzeń dla typu, co jest przydatne podczas dodawania złożonych implementacji protokołów.
@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }Rozwijanie makr podczas kompilacji
Wszystkie makra są rozwijane podczas kompilacji — nie powoduje to narzutu w czasie wykonywania, a rozwinięty kod jest widoczny w Xcode.
// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source codeDeklarowanie makra
Makra deklaruje się w osobnym targetcie makra, używając atrybutu @freestanding lub @attached.
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
= #externalMacro(module: "MyMacros", type: "StringifyMacro")Podsumowanie ról makr
Wolnostojące: #expression, #declaration. Dołączane: @member, @accessor, @peer, @conformance, @extension.
// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }Szybkie sprawdzenie
Która rola makra dodaje nowe elementy, takie jak właściwości lub init, do typu, który ozdabia?
Podsumowanie lekcji
Makra wolnostojące (#name) generują wartości lub deklaracje. Makra dołączane (@name) rozszerzają typy o elementy, akcesory, deklaracje sąsiednie, zgodności z protokołami lub rozszerzenia. Wszystkie makra są rozwijane podczas kompilacji.
Często zadawane pytania
Czy lekcja „Role makr: freestanding a attached” jest bezpłatna?
Tak — pełny tekst „Role makr: freestanding a attached” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Role makr: freestanding a attached”?
Poznanie makr #expression oraz ról makr @attached peer/member/accessor. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Role makr: freestanding a attached”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Role makr: freestanding a attached
- Pisanie niezależnego makra wyrażeń
- Dołączane makra składowych do ograniczania kodu szablonowego
- Testowanie i debugowanie makr