Domknięcia końcowe
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 39 z 56.
Gdy domknięcie jest ostatnim argumentem funkcji, możesz zapisać je poza nawiasami. To forma trailing-closure, dzięki której kod Swift czyta się naturalnie.
let nums = [1, 2, 3]
// Standardowa forma
let a = nums.map({ $0 * 2 })
// Forma z domknięciem na końcu
let b = nums.map { $0 * 2 }Jeśli domknięcie jest jedynym argumentem, nawiasy również znikają. Dlatego wszystko, co do tej pory widziałeś, wygląda jak niestandardowa instrukcja sterująca.
Możesz napisać własne funkcje przyjmujące domknięcia w ten sam sposób:
func repeatN(_ n: Int, action: () -> Void) {
for _ in 0..<n {
action()
}
}
repeatN(3) {
print("hi")
}Forma z domknięciem końcowym sprawia, że zapis repeatN(3) { ... } wygląda jak wbudowana pętla. Właśnie o to chodzi: tworzone przez ciebie struktury sterujące wyglądają tak samo jak te z biblioteki standardowej.
Wyzwanie
ŁatwyZdefiniuj funkcję collect, która:
- Przyjmuje liczbę całkowitą
ni domknięciebuilder: (Int) -> String - Wywołuje
builderdla każdegoiod1don(włącznie) i zwraca tablicę wynikowych ciągów znaków
Wczytaj liczbę całkowitą ze standardowego wejścia, wywołaj collect z tą liczbą, używając domknięcia końcowego, które dla każdej wartości tworzy "i=<i>", a następnie wypisz połączony wynik, używając ,.
Dla wejścia 4 wynikiem jest i=1,i=2,i=3,i=4.
Spróbuj swoich sił
let n = Int(readLine()!)!
// TODO: func collect(_ n:Int, builder:(Int)->String) -> [String]
// następnie wywołaj collect(n) { ... } i wypisz wynik połączony za pomocą ","
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift