首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中捕获算术溢出错误?

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

Stack Overflow用户
提问于 2016-03-13 18:14:15
回答 2查看 9.1K关注 0票数 14

这个可能很简单。我们知道运算符&+对整数执行模运算(环绕),而运算符+则会导致错误。

代码语言:javascript
复制
$ 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.

这是什么错误?我不能抓住它,我也不能把它交给一个可选的:

代码语言:javascript
复制
  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.

我很确定这类错误是来自this Stack Overflow question的相同类型的错误(除以零),但是我不知道这种错误是否可以被捕获。我错过了什么简单的东西?它能被困住吗?如果是这样的话,是怎么做的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-13 18:29:59

区分异常和运行时错误。抛出异常并可被捕获。运行时错误会使程序停止运行。添加和获取溢出是一个运行时错误,简单明了。没什么好抓的。

&+这样的操作符的要点是,它没有错误,也没有告诉您有问题。这就是重点所在。

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

代码语言:javascript
复制
var x: Int8 = 100
let result = x &+ x // -56

x = 100
let result2 = Int8.addWithOverflow(x,x) // (-56, true)
票数 22
EN

Stack Overflow用户

发布于 2020-02-01 11:04:59

看起来这已经成为Swift 5,addingReportingOverflow(_:)中的一种非静态方法。

例如,

代码语言:javascript
复制
UInt8.max.addingReportingOverflow(1)

将返回(partialValue: 0, overflow: true)参见关于 manual page的更多信息

当然,以&开头的普通算术运算符允许溢出而不返回溢出报告,

代码语言:javascript
复制
UInt8.max &+ 1

0作为UInt8返回

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35973899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档