2015-12-08 9 views
16

Ho un blocco di codice che deve eseguire 2 istruzioni che richiedono una prova. E 'meglio nido meta di e ognuno ha il proprio do {} catch {}Come gestisco più tentativi simultanei in 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 
} 

... o avvolgere della prova in un unico blocco di fare ed eseguire consecutivamente?

do { 

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

Il secondo scenario sembra più facile da leggere rispetto al primo, anche se voglio che catch lavoro se uno di questi tiri un errore?

Avrei quindi bisogno di distinguere tra i diversi errori che vengono lanciati, a meno che gli errori siano abbastanza generici, quindi potrebbe non avere importanza. Guardato attraverso la documentazione di Apple e non ho visto nulla in merito.

risposta

14

penso secondo modo è meglio

Supponiamo che io ho questi due funzioni

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 
} 

Poi mi chiameranno in questo modo

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

Questo registrerà

Thing 1 
Error1 

I f thingOne() non genera l'errore, registrerà

Thing 1 
Thing 2 
Error2 
+0

Mi piace anche così, grazie per l'input – bolnad