guard let do wczesnego wyjścia
Rozpakowywanie wartości i wczesne wychodzenie w razie niepowodzenia w celu ograniczenia zagnieżdżeń.
guard let do wczesnego wyjścia to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 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.
Idea konstrukcji guard
guard sprawdza warunek i, jeśli nie jest on spełniony, opuszcza bieżący zakres. Konstrukcja ta służy do wczesnego kończenia działania, dzięki czemu główna ścieżka wykonania nie jest zagnieżdżona.
func greet(_ name: String?) {
guard let name else {
print("No name")
return
}
print("Hello, \(name)")
}
greet("Ada")
greet(nil)Składnia guard let
Napisz guard let value = optional else { return }. W przeciwieństwie do if let rozpakowana wartość pozostaje dostępna w zakresie po konstrukcji guard.
func double(_ text: String) {
guard let n = Int(text) else {
print("Not a number")
return
}
print(n * 2)
}
double("8")
double("x")Wartość pozostaje dostępna
Ponieważ guard kończy działanie w przypadku niepowodzenia, kompilator wie, że później wartość istnieje. Możesz normalnie używać jej w pozostałej części funkcji.
func length(of text: String?) {
guard let text else { return }
let count = text.count
print(count)
}
length("hello")Blok else musi kończyć działanie
Blok else instrukcji guard musi opuszczać bieżący zakres: return, break, continue albo throw. Jest to wymuszane przez kompilator.
func process(_ value: Int?) {
guard let value else {
return
}
print("Processing \(value)")
}
process(99)Skrócona forma guard let
Podobnie jak if let, guard obsługuje skróconą formę: guard let name else { ... }, gdy nazwy są takie same.
func show(_ name: String?) {
guard let name else {
print("missing")
return
}
print(name)
}
show("Kai")Płaska ścieżka sukcesu
Największą zaletą guard jest płaska i czytelna ścieżka sukcesu. Proszę porównać zagnieżdżone piramidy if let z szeregiem instrukcji guard.
func register(name: String?, age: Int?) {
guard let name else { return }
guard let age else { return }
print("\(name) is \(age)")
}
register(name: "Mia", age: 28)Sprawdzanie zwykłych warunków
Guard działa z dowolnym warunkiem typu Bool, nie tylko z opcjonalnymi wartościami. guard count > 0 else { return } kończy działanie wcześniej.
func divide(_ a: Int, by b: Int) {
guard b != 0 else {
print("Cannot divide by zero")
return
}
print(a / b)
}
divide(10, by: 2)
divide(10, by: 0)Guard w pętlach
Wewnątrz pętli guard może wykonać continue, aby pominąć iterację, gdy brakuje danych.
let inputs = ["1", "x", "3"]
for item in inputs {
guard let n = Int(item) else { continue }
print(n * 10)
}Wiele wiązań w jednym guard
Pojedyncza instrukcja guard może rozpakować kilka wartości opcjonalnych rozdzielonych przecinkami. Wszystkie muszą zakończyć się powodzeniem, aby można było kontynuować.
func combine(_ a: String?, _ b: String?) {
guard let a, let b else { return }
print(a + b)
}
combine("foo", "bar")Guard z kontrolami przypominającymi where
Po wiązaniu można dodać po przecinku warunki logiczne, aby dokładniej określić, kiedy instrukcja guard zakończy się powodzeniem.
func validate(_ text: String?) {
guard let text, !text.isEmpty else {
print("invalid")
return
}
print("ok: \(text)")
}
validate("")
validate("hi")Kiedy wybrać guard
Proszę używać guard do sprawdzania warunków wstępnych na początku funkcji, a if let, gdy wartość jest potrzebna tylko chwilowo wewnątrz gałęzi.
func area(width: Int?, height: Int?) -> Int {
guard let width, let height else { return 0 }
return width * height
}
print(area(width: 3, height: 4))Szybkie sprawdzenie
Proszę przetestować guard let.
Podsumowanie: guard let do wcześniejszego zakończenia
guard let value else { return } rozpakowuje wartość opcjonalną i sprawia, że pozostaje ona dostępna w dalszej części zakresu. Jego blok else musi zakończyć działanie, dzięki czemu ścieżka sukcesu pozostaje płaska i czytelna.
func f(_ x: Int?) {
guard let x else { return }
print(x)
}
f(5)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 „guard let do wczesnego wyjścia” jest bezpłatna?
Tak — pełny tekst „guard let do wczesnego wyjścia” 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 „guard let do wczesnego wyjścia”?
Rozpakowywanie wartości i wczesne wychodzenie w razie niepowodzenia w celu ograniczenia zagnieżdżeń. Ć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 2 z 4.
Ile czasu zajmuje lekcja „guard let do wczesnego wyjścia”?
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
- if let i skrócone wiązanie
- guard let do wczesnego wyjścia
- Wiązanie wielu wartości optional
- Wzorzec optional w switch i for