当前位置: 首页 > 面试题库 >

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

狄阳华
2023-03-14
问题内容

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

$ 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组成的元组,说明是否存在溢出。

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

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


 类似资料:
  • 问题内容: 因此,我要在其属性中使用数据类型为char,十进制和日期的表格。我收到了一些算术溢出错误的结果。不知道您是否可以帮助我学习创建此表。 这是确切的消息结果: 消息8115,级别16,状态8,行1将数字转换为数据类型数字的算术溢出错误。该语句已终止。 问题答案: 您的字段只能包含4位数字,带有两位小数,因此最多为99,99。您试图插入包含125,00作为值的行。这就是为什么您溢出(超出容量

  • 问题内容: 我真的很想在我的Swift代码中使用一个更简单的经典try catch块,但是我找不到能做到这一点的任何东西。 我只需要: 这是我的难题,当TableView重新加载新数据时,某些信息仍位于RAM中,该信息会调用具有新的空数据源的tableView崩溃。 所以我经常抛出异常 我已经试过了: 我也尝试过这个: 这是一个优先级很低的代码块,我花了大量的时间进行反复试验,弄清楚swift内置

  • 问题内容: 您可以尝试/捕获Java中的堆栈溢出异常吗?它似乎在向任一方向投掷自己。当程序溢出时,我想“惩罚”该值。 问题答案: 似乎可以工作:

  • 问题内容: 我有一个具有一列的目标表。我也有一个具有一列的源表,但是该表中的值无论如何都是整数。 当我尝试将数据UPSERT成从通过声明,我得到一个标准错误。 将数字转换为数据类型数字的算术溢出错误。 我真的不明白为什么会发生这种情况,因为两种数据类型都是相同的。 但是,奇怪的是:当我使用on创建测试表,然后将合并目标更改为时,upsert完成。我也不明白为什么会这样,因为并且在大多数情况下都是相

  • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I

  • 问题内容: 我用来获取目录中文件名的数组。我想使用新的语法来处理错误: 我可以想象出一个错误可能是不存在,但我不知道如何捕获此错误。而且我不知道还会发生什么其他错误。 该错误处理的文件有这样一个例子 和 但是我不知道如何捕捉具有使用关键字的方法的标准Swift类型错误。 该对的NSFileManager类的引用不说,可能会返回什么样的错误。因此,我不知道要捕获什么错误,或者如果得到它们,该如何处理