0Pricing
Swift Academy · Lekcja

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 dropped

map 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ściowych
  • compactMap — przekształca elementy i usuwa nil, 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.

Wszystkie lekcje w tym kursie

  1. map i compactMap
  2. filter i predykaty
  3. reduce i reduce(into:)
  4. flatMap i łańcuchy przekształceń
← Powrót do Swift Academy