unreachable try thrown manager example errors error enum catch because are swift error-handling runtime-error swift2

thrown - ¿Cuál es la diferencia entre Swift 2.0 do-try-catch y regular Java/C#/ C++ excepciones



try catch swift 4 (1)

Hay 3 diferencias principales que he encontrado:

  1. No es necesario enumerar todos los errores que una función puede arrojar, solo se necesita una palabra clave throws .

  2. No hay una desaceleración significativa al usar estos errores, mientras que Java y otros lenguajes necesitan construir un objeto Exception y desenrollar la pila. En Swift, una palabra clave throws puede verse como la función que devuelve un objeto Either , siendo uno el tipo de devolución original y el otro un valor de ErrorType .

  3. En Swift, todos los errores deben ser manejados o declarados para ser lanzados, es imposible obtener un error de un método que no indica que está arrojando un error. (En términos de Java, todos los errores son "excepciones marcadas")

Parece que Swift 2.0 ha cambiado de las convenciones tradicionales ObjC (NSError return) y Swift 1.X (Success / Failure opcionals) de manejo de errores en tiempo de ejecución, a algo que se ve muy similar al manejo de excepciones en lenguajes como Java / C # / C ++ / etc. .

Apple tradicionalmente ha enfatizado el uso de NSError lugar de arrojar NSException for runtime errors (frente a errores de programador), ya que el desenrollado de la pila NSException podría causar pérdidas de memoria con la configuración predeterminada del compilador ObjC.

Ahora, sin embargo, han ideado algo que se ve muy, muy similar a las excepciones tradicionales. Mi pregunta es:

¿Existen diferencias reales entre el manejo de errores de Swift 2.0 y el manejo tradicional de excepciones junto a la nomenclatura (error frente a excepción) y la sintaxis (do catch, en lugar de try-catch, try used before method call, etc.).