nested - statement - try catch on swift
¿Cómo manejo múltiples intentos consecutivos en swift 2.0? (1)
Tengo un bloque de código que necesita ejecutar 2 sentencias que requieren un intento. ¿Es mejor anidar los try? Y cada uno tiene su propio do {} catch {}
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 envolver el try en un bloque do y ejecutarlo consecutivamente?
do {
try thingOne()
try thingTwo()
} catch let error as NSError {
//do something with this error
}
El segundo escenario parece más fácil de leer que el primero, aunque ¿funcionará esa catch
si alguno de los dos arroja un error?
Entonces necesitaría distinguir entre los diferentes errores que se lanzan, a menos que los errores sean lo suficientemente genéricos, entonces puede que no importe. Miré a través de la documentación de Apple y no vi nada al respecto.
Creo que la segunda forma es mejor.
Supongamos que tengo estas dos funciones
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
}
Entonces lo llamaré así.
do {
try thingOne()
try thingTwo()
} catch CustomError.Type1 {
print("Error1")
} catch CustomError.Type2{
print("Error2")
} catch {
print("Not known/(error) ")
}
Esto se registrará
Thing 1
Error1
Si thingOne()
no lanza el error, se registrará
Thing 1
Thing 2
Error2