一尘不染

Swift中如何捕获算术溢出错误?

swift

这可能很容易。我们知道运算符&+会对整数进行整数运算(环绕),而运算符+会导致错误。

$ 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.

这是什么错误?我无法捕获它,也无法将其变成可选的:

  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.

我很确定,这种错误与(除以零)中的错误相同,但我不知道是否可以捕获此类错误。我缺少什么简单的东西?能不能被困住?如果是这样,怎么办?


阅读 265

收藏
2020-07-07

共1个答案

一尘不染

在异常和运行时错误之间进行区分。引发异常并可以将其捕获。运行时错误会使您的程序停滞不前。添加和获取溢出是简单而简单的运行时错误。没有什么可捕捉的。

像这样的操作员的要点&+是它不会出错,也不会告诉您有问题。这就是重点。

如果您认为自己可能会溢出,并且想知道是否这样做,请使用静态方法,例如addWithOverflow。它返回一个由结果和Bool组成的元组,说明是否存在溢出。

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

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