Menu
Coddy logo textTech

throws i Error

Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 44 z 56.

Swift obsługuje błędy, wymagając od funkcji zadeklarowania, że mogą zakończyć się niepowodzeniem. Treść funkcji zgłasza wartość błędu; wywołujący ją kod musi go obsłużyć.

Typ błędu to wszystko, co jest zgodne z wbudowanym protokołem Error. Najprościej zadeklarować własny typ za pomocą enuma:

enum InputError: Error {
    case empty
    case tooLong
}

Funkcja zgłaszająca błędy używa słowa kluczowego throws w swojej sygnaturze i instrukcji throw w swoim ciele:

func validate(_ s: String) throws -> String {
    if s.isEmpty { throw InputError.empty }
    if s.count > 100 { throw InputError.tooLong }
    return s
}

Nie możesz wywołać funkcji, która może zgłosić błąd, bezpośrednio — kompilator wymaga, aby obsłużyć ten błąd. W następnej lekcji dowiesz się, jak to zrobić.

challenge icon

Wyzwanie

Łatwy

Zdefiniuj wyliczenie NumError: Error z dwoma przypadkami: negative i tooBig.

Zdefiniuj funkcję zgłaszającą błędy doubleSafely(_ n: Int) throws -> Int, która:

  • Zgłasza .negative, gdy n < 0
  • Zgłasza .tooBig, gdy n > 100
  • W przeciwnym razie zwraca n * 2

Wczytaj jedną liczbę całkowitą ze stdin. Wywołaj doubleSafely wewnątrz bloku do/catch (dokładną składnię poznasz na następnej lekcji; na razie użyj dokładnie tego szkieletu):

do {
    let result = try doubleSafely(n)
    print("ok: \(result)")
} catch NumError.negative {
    print("negative")
} catch NumError.tooBig {
    print("too big")
} catch {
    print("unknown")
}

Dla danych wejściowych 10 wynikiem jest ok: 20. Dla -1 wynikiem jest negative. Dla 500 wynikiem jest too big.

Spróbuj swoich sił

let n = Int(readLine()!)!

// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Edytor online Swift