map i compactMap
Przekształcanie elementów i odrzucanie wartości nil.
map i compactMap to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. 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 4 lekcji w sumie.
Czym jest map
map to funkcja wyższego rzędu: przyjmuje closure i stosuje ją do każdego elementu sekwencji, zwracając nową tablicę przekształconych wyników.
- Oryginalna kolekcja nigdy nie jest modyfikowana
- Liczba elementów wyniku zawsze jest równa liczbie elementów wejściowych
- Typ elementów może się zmienić (np.
Int→String)
Prosty przykład map
Podwajanie każdej liczby w tablicy:
let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8]Zmiana typu elementu
map może przekształcać wartości Int w wartości String:
let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels) // ["ID-10", "ID-20", "ID-30"]map z funkcją o nazwie
Można przekazać dowolną funkcję o pasującej sygnaturze, a nie tylko trailing closure:
let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper) // ["SWIFT", "MAP"]Problem, którego map nie rozwiązuje
map zachowuje każdy element. Jeśli transform zwraca optional (może się nie powieść), otrzymuje się tablicę optionali, taką jak [Int?] — pełną luk nil, które trzeba później odfiltrować.
To właśnie rozwiązuje compactMap.
Czas na compactMap
compactMap przekształca każdy element i usuwa każdy wynik będący nil, zwracając tablicę bez optionali:
let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums) // [1, 2, 4] -- "x" was droppedmap i compactMap obok siebie
Różnica polega na tym, czy wyniki nil zostają zachowane:
let raw = ["1", "x", "3"]
print(raw.map { Int($0) }) // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]Rozpakowywanie optionali w kolekcji
compactMap to idiomatyczny sposób usuwania wartości nil z tablicy optionali:
let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean) // [1, 3, 5]Parsowanie za pomocą compactMap
Częste zastosowanie w praktyce: analizowanie tylko poprawnych wierszy danych wejściowych:
let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values) // [42, 7]
print(values.reduce(0, +)) // 49Łączenie map i compactMap
Można je łączyć: użyć map do ukształtowania danych, a compactMap do zachowania tylko udanych wyników:
let scores = ["90", "85", "n/a", "70"]
let passed = scores
.compactMap { Int($0) }
.map { $0 >= 80 ? "pass" : "fail" }
print(passed) // ["pass", "pass", "fail"]compactMap w łańcuchach opcjonalnych
Świetnie działa również z opcjonalnym dostępem do właściwości:
struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names) // ["Ann", "Bo"]Szybkie sprawdzenie
Która funkcja przekształca elementy i jednocześnie usuwa wyniki nil?
Podsumowanie
W tej lekcji poznano dwie podstawowe funkcje przekształcające:
map— przekształca każdy element, a liczba wyników jest równa liczbie elementów wejściowychcompactMap— przekształca elementy i usuwanil, dzięki czemu świetnie nadaje się do parsowania i rozpakowywania optionali- Obie funkcje zwracają nowe tablice i nigdy nie modyfikują źródła
- Można je łączyć, aby najpierw kształtować dane, a następnie przejrzyście je filtrować
Następnie: filtrowanie za pomocą predykatów.
Często zadawane pytania
Czy lekcja „map i compactMap” jest bezpłatna?
Tak — pełny tekst „map i compactMap” 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 4 lekcji w sumie.
Co nauczysz się w „map i compactMap”?
Przekształcanie elementów i odrzucanie wartości nil. Ć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 4.
Ile czasu zajmuje lekcja „map i compactMap”?
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.