Swift Academy · Oppitunti

Makrojen roolit: itsenäiset ja liitetyt

#expression-makrojen sekä @attached peer-, member- ja accessor-makrojen roolien ymmärtäminen.

Oppitunti 1/413 vaihetta

Makrojen roolit: itsenäiset ja liitetyt on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä Swift-makrot ovat

Swift-makrot laajentavat lähdekoodia käännösvaiheessa ja tuottavat toistuvan koodin automaattisesti ilman ajonaikaista lisäkustannusta.

// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }

Itsenäiset lausekemakrot

Itsenäiset lausekemakrot alkavat merkillä # ja tuottavat arvon tai aiheuttavat sivuvaikutuksen.

// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"

Itsenäiset määrittelymakrot

Itsenäiset määrittelymakrot tuottavat uusia määrittelyjä, kuten funktioita ja muuttujia, käyttökohtaansa.

// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2

Liitetyt jäsenmakrot

Liitetyt @member-makrot lisäävät niitä ympäröivään tyyppiin uusia tallennettuja tai laskettuja ominaisuuksia, alustajan tai metodeja.

@AddID
struct User { var name: String }
// Expands to: var id = UUID()

Liitetyt aksessorimakrot

Liitetyt @accessor-makrot tuottavat tallennettujen ominaisuuksien getter- ja setter-toteutukset.

struct Point {
  @Clamped(0...100)
  var x: Int = 0
  // accessor macro generates get/set with clamping
}

Liitetyt vertaismakrot

Vertaismakrot lisäävät sisarmäärittelyjä sen määrittelyn viereen, johon ne on liitetty.

class Service {
  @AddAsync
  func fetchSync(completion: @escaping (Data)->Void) { ... }
  // peer macro adds: func fetch() async -> Data
}

Liitetyt mukaisuusmakrot

Mukaisuusmakrot lisäävät tyyppiin protokollamukaisuuksia ja niiden edellyttämät toteutukset.

@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }

Liitetyt laajennusmakrot

Laajennusmakrot tuottavat tyypille kokonaisia extension-lohkoja, mikä on hyödyllistä monimutkaisten protokollatoteutusten lisäämisessä.

@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }

Makrot laajentuvat käännösvaiheessa

Kaikki makrojen laajennukset tapahtuvat käännöksen aikana — ajonaikaisia kustannuksia ei synny, ja laajennettu koodi on nähtävissä Xcodessa.

// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source code

Makron määrittäminen

Makrot määritetään erillisessä makrokohteessa käyttäen @freestanding- tai @attached-attribuuttia.

@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
  = #externalMacro(module: "MyMacros", type: "StringifyMacro")

Makrojen roolien yhteenveto

Itsenäiset: #expression, #declaration. Liitetyt: @member, @accessor, @peer, @conformance, @extension.

// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }

Pikakertaus

Mikä makrorooli lisää koristamaansa tyyppiin uusia jäseniä, kuten ominaisuuksia tai alustajan?

Oppitunnin yhteenveto

Itsenäiset makrot (#name) tuottavat arvoja tai määrittelyjä. Liitetyt makrot (@name) täydentävät tyyppejä jäsenillä, aksessoreilla, vertaismäärittelyillä, protokollamukaisuuksilla tai laajennuksilla. Kaikki laajennukset tapahtuvat käännösvaiheessa.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Makrojen roolit: itsenäiset ja liitetyt” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Makrojen roolit: itsenäiset ja liitetyt”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Makrojen roolit: itsenäiset ja liitetyt”?

#expression-makrojen sekä @attached peer-, member- ja accessor-makrojen roolien ymmärtäminen. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Makrojen roolit: itsenäiset ja liitetyt”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Makrojen roolit: itsenäiset ja liitetyt
  2. Itsenäisen lausekemakron kirjoittaminen
  3. Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen
  4. Makrojen testaaminen ja virheenkorjaus
← Takaisin: Swift Academy