Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen
init-, CodingKeys- tai Equatable-mukaisuuksien automaattinen luominen jäsenmakroilla.
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 accessorsMakrovirheiden 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 runtimePikakertaus
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.
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
- Makrojen roolit: itsenäiset ja liitetyt
- Itsenäisen lausekemakron kirjoittaminen
- Liitetyt jäsenmakrot boilerplate-koodin vähentämiseen
- Makrojen testaaminen ja virheenkorjaus