Saltar al contenido

¿Cómo se atrapan los errores de desbordamiento aritmético en Swift?

Después de de esta prolongada recopilación de datos hemos podido solucionar esta inconveniente que pueden tener muchos usuarios. Te compartimos la respuesta y deseamos resultarte de mucha apoyo.

Solución:

Distinguir entre una excepción y un error de tiempo de ejecución. Se lanza una excepción y se puede capturar. Un error de tiempo de ejecución detiene su programa en seco. Agregar y obtener un desbordamiento es un error de tiempo de ejecución, simple y llanamente. No hay nada que atrapar.

El punto de un operador como &+ es que no da error y no te dice que hubo un problema. Ese es el punto.

Si cree que podría desbordarse y quiere saber si lo hizo, use static métodos como addWithOverflow. Devuelve una tupla que consiste en el resultado y un Bool que indica si hubo un desbordamiento.

var x: Int8 = 100
let result = x &+ x // -56

x = 100
let result2 = Int8.addWithOverflow(x,x) // (-56, true)

Parece que esto se ha convertido en un no-static método en Swift 5, addingReportingOverflow(_:).

Así por ejemplo,

UInt8.max.addingReportingOverflow(1)

regresará (partialValue: 0, overflow: true) Ver más en el Int página de manual

Y, por supuesto, los operadores aritméticos normales que comienzan con & para permitir el desbordamiento sin devolver informes de desbordamiento,

UInt8.max &+ 1

volvería 0 como un UInt8

Si haces scroll puedes encontrar las referencias de otros programadores, tú igualmente puedes dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *