0Pricing
Swift Academy · Lekcja

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

Dołą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 code

Deklarowanie 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

  1. Role makr: freestanding a attached
  2. Pisanie niezależnego makra wyrażeń
  3. Dołączane makra składowych do ograniczania kodu szablonowego
  4. Testowanie i debugowanie makr
← Powrót do Swift Academy