Swift Academy · Lekcja

Klauzule where w rozszerzeniach

Używajcie where w rozszerzeniach typów i protocols , aby dodawać API tylko wtedy, gdy ograniczenia są spełnione (np. Array where Element: Equatable , Collection where Element == Int ).

Lekcja 3 z 38 kroki

Klauzule where w rozszerzeniach to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 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.

Po co stosować rozszerzenia z ograniczeniami?

Dodawaj interfejsy API tylko wtedy, gdy typy spełniają ograniczenia, używając where w rozszerzeniach:

  • rozszerzenia typów (np. Array)
  • rozszerzenia protokołów (np. Collection)
  • ograniczenia dokładnego dopasowania (np. Element == Int)

Rozszerzenie typu z ograniczeniem

Dodaj metody do Array tylko wtedy, gdy jego Element jest zgodny z Equatable. Tablice z elementami niezgodnymi z Equatable nie będą udostępniać tych interfejsów API.

extension Array where Element: Equatable {
    func removing(_ value: Element) -> [Element] {
        filter { $0 != value }
    }
    func containsAll(_ others: [Element]) -> Bool {
        others.allSatisfy(self.contains)
    }
}
print([1,2,3].removing(2))        // [1,3]
print(["a","b"].containsAll(["b"])) // true

Rozszerzenie protokołu z where

Rozszerzenie protokołu dodaje interfejs API do wszystkich zgodnych typów, gdy ograniczenie jest spełnione (w tym przypadku do dowolnego Collection z elementami zgodnymi z Comparable).

extension Collection where Element: Comparable {
    var isSorted: Bool {
        // Pair each element with the next; ensure non-decreasing order
        zip(self, dropFirst()).allSatisfy(<=)
    }
}
print([1,2,3].isSorted)     // true
print([3,1,2].isSorted)     // false

Ograniczenia dokładnego dopasowania

Używaj ograniczeń równości do tworzenia ukierunkowanych interfejsów API, np. tylko wtedy, gdy Element == Int. Nie będą one dostępne dla innych typów elementów.

extension Collection where Element == Int {
    var sum: Int { reduce(0, +) }
    func average() -> Double {
        isEmpty ? 0 : Double(sum) / Double(count)
    }
}
print([1,2,3].sum)          // 6
print([1,2,3].average())    // 2.0

Interfejsy API oparte na możliwościach

Ograniczaj typy według możliwości (protokołów takich jak Numeric i Hashable), aby tworzyć zaawansowane, wielokrotnego użytku funkcje pomocnicze.

extension Collection where Element: Numeric {
    var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
    var uniques: [Element] {
        var seen = Set<Element>()
        return filter { seen.insert($0).inserted }
    }
}
print([1,2,2,3].uniques)    // [1,2,3]
print([1,2,3].total)        // 6

Notatki projektowe

Wskazówki:

  • Należy stosować minimalne ograniczenia, aby ułatwić ponowne użycie.
  • Należy unikać nakładających się rozszerzeń definiujących ten sam element, ponieważ może to utrudniać rozwiązywanie przeciążeń.
  • Należy dokumentować założenia (kolejność, unikalność, dziedziny wartości liczbowych).

Cel rozszerzeń z ograniczeniami

Szybkie sprawdzenie: Co umożliwiają rozszerzenia z ograniczeniami?

Podsumowanie

Podsumowanie: Należy używać where w rozszerzeniach typów/protokołów, aby precyzyjnie kierować API — według możliwości (: Comparable) lub dokładnego typu (== Int) — zachowując bezpieczeństwo kodu i jego łatwe odnajdywanie.

Bezpłatny start

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 „Klauzule where w rozszerzeniach” jest bezpłatna?

Tak — pełny tekst „Klauzule where w rozszerzeniach” 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 „Klauzule where w rozszerzeniach”?

Używajcie where w rozszerzeniach typów i protocols , aby dodawać API tylko wtedy, gdy ograniczenia są spełnione (np. Array where Element: Equatable , Collection where Element == Int ). Ć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 3 z 3.

Ile czasu zajmuje lekcja „Klauzule where w rozszerzeniach”?

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. Zgodności warunkowe
  2. Rekurencyjne ograniczenia i generyka wyższego rzędu
  3. Klauzule where w rozszerzeniach
← Powrót do Swift Academy