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:
No es necesario enumerar todos los errores que una función puede arrojar, solo se necesita una palabra clave
throws
.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 clavethrows
puede verse como la función que devuelve un objetoEither
, siendo uno el tipo de devolución original y el otro un valor deErrorType
.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.).