Tworzenie mini-DSL za pomocą result builders
Zbuduj mały DSL za pomocą @resultBuilder : zdefiniuj funkcje buildera, łącz bloki oraz obsługuj instrukcje warunkowe i pętle, aby konstrukcje były czytelne.
Tworzenie mini-DSL za pomocą result builders to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 3. 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 3 lekcji w sumie.
Dlaczego konstruktory wyników?
Cel: Przekształcanie czytelnych bloków w wartości za pomocą @resultBuilder. Definiuje się sposób łączenia elementów, a miejsce wywołania pozostaje czyste i deklaratywne.
Mały konstruktor
Deklarujemy buildBlock, aby łączyć elementy, i udostępniamy API (lines{}), które zwraca tablicę ciągów znaków z czytelnego bloku.
@resultBuilder
struct StringListBuilder {
static func buildBlock(_ parts: String...) -> [String] { parts }
// Optional support for conditionals/arrays:
static func buildEither(first: [String]) -> [String] { first }
static func buildEither(second: [String]) -> [String] { second }
static func buildArray(_ components: [[String]]) -> [String] { components.flatMap { $0 } }
}
// DSL entry function using the builder
func lines(@StringListBuilder _ content: () -> [String]) -> [String] {
content()
}
// Usage: create an array of strings with a block
let list = lines {
"Hello"
"Swift"
"Builders"
}
print(list)Warunki w konstruktorach
Dzięki buildEither instrukcje if/else działają wewnątrz bloku. Konstruktor decyduje, która gałąź wnosi wynik.
let showExtra = true
let conditional = lines {
"Base"
if showExtra {
"Extra"
} else {
"Hidden"
}
}
print(conditional) // ["Base","Extra"]Pętle w konstruktorach
buildArray zbiera wyniki z pętli (for/map), dzięki czemu powtarzane elementy można naturalnie emitować.
let items = ["a","b","c"]
let looped = lines {
for x in items { x.uppercased() } // contributes ["A","B","C"]
}
print(looped)Konstruktor pojedynczej wartości
Konstruktory mogą generować pojedynczą wartość. Tutaj łączymy części w jeden ciąg znaków, nadal używając warunków.
@resultBuilder
struct TextBuilder {
static func buildBlock(_ parts: String...) -> String {
parts.joined(separator: " ")
}
static func buildEither(first: String) -> String { first }
static func buildEither(second: String) -> String { second }
static func buildArray(_ components: [String]) -> String {
components.joined(separator: " ")
}
}
func text(@TextBuilder _ content: () -> String) -> String { content() }
// Compose a small sentence with conditions
let loggedIn = false
let sentence = text {
"[INFO]"
"Welcome,"
if loggedIn { "user!" } else { "guest." }
}
print(sentence) // "[INFO] Welcome, guest."Wskazówki projektowe
Wskazówki:
- Należy utrzymywać DSL-e w minimalnym zakresie i skupiać je na jednym celu.
- Należy udostępnić jedną wyraźną funkcję wejściową oznaczoną właściwym konstruktorem wyników.
- Należy obsługiwać tylko potrzebne elementy:
buildBlock,buildEither,buildArray. - Należy udokumentować, jakie instrukcje są dozwolone wewnątrz bloku.
Cel konstruktora wyników
Szybkie sprawdzenie: Jaka jest główna korzyść z konstruktora wyników?
Podsumowanie
Podsumowanie: Należy zdefiniować metody konstruktora wyników, udostępnić niewielkie API wejściowe i tworzyć czytelne bloki z obsługą instrukcji if/for.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Tworzenie mini-DSL za pomocą result builders” jest bezpłatna?
Tak — pełny tekst „Tworzenie mini-DSL za pomocą result builders” 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 3 lekcji w sumie.
Co nauczysz się w „Tworzenie mini-DSL za pomocą result builders”?
Zbuduj mały DSL za pomocą @resultBuilder : zdefiniuj funkcje buildera, łącz bloki oraz obsługuj instrukcje warunkowe i pętle, aby konstrukcje były czytelne. Ć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 3.
Ile czasu zajmuje lekcja „Tworzenie mini-DSL za pomocą result builders”?
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
- Tworzenie mini-DSL za pomocą result builders
- Zakresowe API i wzorce czytelności
- Praktyczne przykłady bez frameworków interfejsu użytkownika