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.