try statement example catch nested try-catch swift2

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