How does one trap arithmetic overflow errors in Swift?

Viewed 8582

This one is probably easy. We know that the operator &+ does modular arithmetic on integers (wraps around), while the operator + causes an error.

$ swift
  1> var x: Int8 = 100
x: Int8 = 100
  2> x &+ x
$R0: Int8 = -56
  3> x + x
Execution interrupted. Enter Swift code to recover and continue.

What kind of error is this? I can't catch it and I can't turn it in to an optional:

  4> do {try x + x} catch {print("got it")}
Execution interrupted. Enter Swift code to recover and continue.
  5> try? x + x
Execution interrupted. Enter Swift code to recover and continue.

I'm pretty sure this kind of error is the same kind of error from this Stack Overflow question (a divide-by-zero) but I don't know if this kind of error can be trapped. What simple thing am I missing? Can it be trapped or not? If so, how?

2 Answers

Looks like this has become a non-static method in Swift 5, addingReportingOverflow(_:).

So for example,

UInt8.max.addingReportingOverflow(1)

will return (partialValue: 0, overflow: true) See more on the Int manual page

And of course the normal arithmetic operators that start with & to allow overflow without returning overflow reports,

UInt8.max &+ 1

would return 0 as a UInt8

Related