2015-12-08 9 views
16

Mam blok kodu, który musi wykonać 2 instrukcje, które wymagają wypróbowania. Czy lepiej gnieździe try, a każdy z nich ma własną rękę do {} catch {}Jak obsłużyć kolejne wielokrotne tryby w swift 2.0

do { 
    try thingOne() 
    do { 
     try thingTwo() 
    } catch let error as NSError { 
      //handle this specific error 
    } 
} catch let error as NSError { 
     //handle the other specific error here 
} 

... lub owinąć spróbować w jednej zrobić blok i uruchomić je kolejno?

do { 

    try thingOne() 
    try thingTwo() 
} catch let error as NSError { 
    //do something with this error 
} 

Drugi scenariusz wydaje się łatwiejsze do odczytania niż pierwszy, chociaż że catch pracy, jeżeli jeden z tych, zgłasza błąd?

Musiałbym wtedy rozróżnić różne błędy, które są rzucane, chyba że błędy są generyczne wystarczająco, to może nie mieć znaczenia. Przejrzałem dokumentację Apple i nie widziałem nic na ten temat.

Odpowiedz

14

myślę drugi sposób jest lepszy

Załóżmy, że mam tych dwóch funkcji

func thingOne() throws{ 
     print("Thing 1") 
     throw CustomError.Type1 
} 
func thingTwo() throws{ 
    print("Thing 2") 

    throw CustomError.Type2 

} 
enum CustomError:ErrorType{ 
    case Type1 
    case Type2 
} 

Wtedy nazwać jak ten

do { 
     try thingOne() 
     try thingTwo() 
    } catch CustomError.Type1 { 
     print("Error1") 
    } catch CustomError.Type2{ 
     print("Error2") 
    } catch { 
     print("Not known\(error) ") 
    } 

To zalogować

Thing 1 
Error1 

I f thingOne() nie zgłasza błędu, będzie się logować

Thing 1 
Thing 2 
Error2 
+0

Podoba mi się również, dzięki za wejście – bolnad

Powiązane problemy