这可能很容易。我们知道运算符&+会对整数进行整数运算(环绕),而运算符+会导致错误。
&+
+
$ 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.
我很确定,这种错误与(除以零)中的错误相同,但我不知道是否可以捕获此类错误。我缺少什么简单的东西?能不能被困住?如果是这样,怎么办?
在异常和运行时错误之间进行区分。引发异常并可以将其捕获。运行时错误会使您的程序停滞不前。添加和获取溢出是简单而简单的运行时错误。没有什么可捕捉的。
像这样的操作员的要点&+是它不会出错,也不会告诉您有问题。这就是重点。
如果您认为自己可能会溢出,并且想知道是否这样做,请使用静态方法,例如addWithOverflow。它返回一个由结果和Bool组成的元组,说明是否存在溢出。
addWithOverflow
var x: Int8 = 100 let result = x &+ x // -56 x = 100 let result2 = Int8.addWithOverflow(x,x) // (-56, true)