swift - 将使用 Swift 的关键字 "throw"创建的错误称为 "exception"是否正确?

标签 swift error-handling

使用关键字throwthrowsdotrycatch< 进行错误处理 是在 Swift 的第 2 版中引入的。在 the relevant chapter of the official Swift documentation没有使用exception这个词,但声明为:

Error handling in Swift resembles exception handling in other languages, with the use of the try, catch and throw keywords. Unlike exception handling in many languages—including Objective-C—error handling in Swift does not involve unwinding the call stack, a process that can be computationally expensive.

那么仅仅因为缺少调用堆栈就不能称为异常? (对于错误处理机制必须提供的特征是否有科学定义才能称为异常?)

最佳答案

我认为为什么将其称为错误处理与调用堆栈无关。根据这两个词的定义,调用堆栈无关紧要这一事实证实了这一点。我相信您在问题中包含的引述的目的仅仅是为了区分 Swift 中的错误处理和其他语言中的异常处理,而不考虑名称上的差异。

用非swift语言来区分,常见的描述是不处理异常就是错误。因此错误和异常是两个独特的实体。

现在在 Swift 中,他们似乎试图完全摆脱“异常”一词,而只使用术语错误。因此可以处理错误,否则程序会崩溃。这可能是因为实际崩溃的名称并不重要,更重要的是导致崩溃的原因,在本例中为“错误”。

就 iOS 世界的使用而言,我在这方面经验不多,但我认为即使将其称为“异常处理”在技术上并不正确,但大多数 Swift 程序员都会知道你在说什么,并且可能不纠正你(甚至想纠正你)。

总的来说,我认为这主要是语义问题,而不是什么构成“错误”,什么构成“异常”。

编辑

我应该澄清一下,我的意思是错误和异常之间的区别在 iOS/Swift 中 不仅仅是语义。异常是当非法事情发生时抛出的东西,并且可以创建错误以允许您防止显示这些消息/您的程序崩溃。在这方面,它们是完全不同的东西。

我的观点是,在不同的编码语言中,术语“错误”(在 Swift 中)和“异常”(例如在 Java 中)基本相同,只是名称不同。

例如,我可以尝试处理一个名为“ArrayError”的错误(我知道这个名字很愚蠢,它只是一个例子),而在 Java 中我可以 try catch IndexOutOfBoundsException。这两个对象都被抛出和捕获,因此我对两者进行了比较,强调了 Swift 与其他语言在命名约定方面的差异。

但是不,错误和异常在技术上不是一回事,即使在 Swift 中也是如此。

关于swift - 将使用 Swift 的关键字 "throw"创建的错误称为 "exception"是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41463565/

相关文章:

json - 如何在 Swift 3 中用 Alamofire 4 解析这个 json?

java - 在 Java 异常中返回导致该异常的行的内容

javascript - 将错误抛出到promise.catch之外

error-handling - Cuda::推力错误说 "terminate called after throwing an instance of '推力::系统::系统错误'”

ios - 将 UIButton 图像从一个图像过渡到另一个图像

ios - 如何按需隐藏状态栏?

C++ 字符数组错误处理

ajax - ajax请求中的angularjs错误处理

swift - 升级 Xcode 后如何修复 'Cannot override a self return type with a non-self return type'

ios - 如何使用 Swift 旋转核心文本?