Menu
Coddy logo textTech

do, try, catch

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 45 / 56.

Hataları ele almanın tam biçimi do/try/catch şeklindedir:

enum DivError: Error { case byZero }

func divide(_ a: Int, _ b: Int) throws -> Int {
    if b == 0 { throw DivError.byZero }
    return a / b
}

do {
    let r = try divide(10, 2)
    print(r)                      // 5
} catch DivError.byZero {
    print("can't divide by zero")
} catch {
    print("unknown error")
}

try, hata fırlatan herhangi bir çağrının önüne gelir. Eğer çağrı hata fırlatırsa, kontrol eşleşen catch bloğuna atlar; aksi takdirde yürütme do bloğunun sonrasına devam eder.

Birden fazla catch ifadesi yukarıdan aşağıya doğru çalışır ve tıpkı bir switch gibi ilk eşleşen kazanır. Sondaki yalın catch her şeyi yakalayan kısımdır; derleyiciyi mutlu etmek için neredeyse her zaman bir tanesine ihtiyaç duyarsınız.

challenge icon

Görev

Kolay

ParseError: Error enum'unu empty, notInteger ve negative olmak üzere üç durumla tanımlayın.

Şunları yapan throwing bir parsePositive(_ s: String) throws -> Int işlevi tanımlayın:

  • Boşluklardan arındırılmış .empty boş olduğunda s fırlatır
  • .notInteger, s olarak ayrıştırılamadığında Int fırlatır
  • Ayrıştırılan değer .negative olduğunda < 0 fırlatır
  • Diğer durumlarda ayrıştırılan değeri döndürür

stdin'den tek bir satır okuyun ve parsePositive işlevini bir do/catch bloğunda çağırın. Şunları yazdırın:

  • Başarılı olduğunda got: <n>
  • Her durum için error: empty, error: not integer veya error: negative

42 girdisi için çıktı got: 42 olur. Boş bir satır için çıktı error: empty olur. abc için çıktı error: not integer olur.

Kendin dene

let line = readLine()!

// YAPILACAK: enum ParseError; func parsePositive(_:) throws -> Int;
// üç dal ve her şeyi kapsayan catch ile do/try/catch
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground