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 ).
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"])) // trueRozszerzenie 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) // falseOgraniczenia 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.0Interfejsy 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) // 6Notatki 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.
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
- Zgodności warunkowe
- Rekurencyjne ograniczenia i generyka wyższego rzędu
- Klauzule where w rozszerzeniach