Swift Academy · Oppitunti

Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen

init-, CodingKeys- tai Equatable-mukaisuuksien automaattinen luominen jäsenmakroilla.

Oppitunti 3/413 vaihetta

Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Jäsenmakron yleiskatsaus

Liitetty jäsenmakro tuottaa uusia jäseniä, kuten ominaisuuksia, metodeja ja alustajia, suoraan koristamaansa tyyppiin.

@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }

Mukautuminen MemberMacro-protokollaan

Toteuttakaa MemberMacro ja palauttakaa uusien jäsenten esityksen sisältävä DeclSyntax-taulukko.

import SwiftSyntaxMacros

struct AddIDMacro: MemberMacro {
  static func expansion(
    of node: AttributeSyntax,
    providingMembersOf decl: some DeclGroupSyntax,
    in context: some MacroExpansionContext
  ) throws -> [DeclSyntax] {
    return ["var id = UUID()"]
  }
}

Alustajan tuottaminen

Jäsenmakrot voivat tuottaa mukautetun alustajan, joka tarvittaessa korvaa jäsenkohtaisen alustajan.

// Macro expansion returns:
[
  "init(name: String) { self.name = name; self.id = UUID() }"
]

@Observable-makron sisäinen toiminta

Swiftin sisäänrakennettu @Observable käyttää jäsenmakroja lisätäkseen luokkaan havainnointiin tarvittavan infrastruktuurin.

@Observable
class Counter {
  var count = 0
  // macro adds: _$observationRegistrar, access(), withMutation()
}

Koristellun tyypin lukeminen

Voitte käyttää koristellun tyypin ominaisuuksia decl-parametrin kautta ja tuottaa kontekstin huomioon ottavia jäseniä.

if let structDecl = decl.as(StructDeclSyntax.self) {
  let members = structDecl.memberBlock.members
  // iterate to inspect stored properties
}

Tallennettujen ominaisuuksien poimiminen

Suodattakaa jäsenten luettelosta muuttujamäärittelyt, jotka vastaavat tallennettujen ominaisuuksien rakenteita, ja käyttäkää niitä koodin generoinnissa.

let storedProps = members.compactMap { member -> VariableDeclSyntax? in
  guard let varDecl = member.decl.as(VariableDeclSyntax.self),
        varDecl.bindingSpecifier.tokenKind == .keyword(.var)
  else { return nil }
  return varDecl
}

Equatable-toteutuksen tuottaminen jäsenistä

@AutoEquatable-makro voi tuottaa operaattorin == vertaamalla jokaista tallennettua ominaisuutta.

// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
  lhs.name == rhs.name && lhs.id == rhs.id
}

Jäsen- ja mukaisuusmakrojen yhdistäminen

Usein MemberMacro yhdistetään ConformanceMacro-makroon, jotta tyyppiin voidaan sekä lisätä jäseniä että ilmoittaa protokollamukaisuus.

struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }

Attribuuttien argumentit

Makro voi vastaanottaa argumentteja, joilla sen tuottamaa koodia mukautetaan.

@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessors

Makrovirheiden raportointi

Heittäkää MacroExpansionError tai tuottakaa diagnostiikkailmoituksia, kun makroa käytetään virheellisesti.

guard decl.is(StructDeclSyntax.self) else {
  throw MacroError.message("@AddID can only be applied to structs")
}

Koontisuorituskyky

Koska laajennus tapahtuu käännösvaiheessa, jäsenmakrot eivät aiheuta ajonaikaista lisäkustannusta, ja generoitu koodi voidaan välimuistittaa.

// All generated members are emitted as source code
// and compiled normally — no reflection at runtime

Pikakertaus

Mihin protokollaan liitetyn jäsenmakron on mukauduttava?

Oppitunnin yhteenveto

Jäsenmakrot (MemberMacro) tuottavat koristamaansa tyyppiin tallennettuja ominaisuuksia, laskettuja ominaisuuksia ja alustajia. Lukekaa tyypin olemassa olevat jäsenet, jotta voitte tuottaa kontekstin mukaan mukautuvaa koodia. Yhdistämällä makroon ConformanceMacro voitte lisätä myös protokollamukaisuuksia.

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 ”Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen”. 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 ”Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen”?

init-, CodingKeys- tai Equatable-mukaisuuksien automaattinen luominen jäsenmakroilla. 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 3/4.

Kuinka kauan ”Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen”-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