使用关键字throw
、throws
、do
、try
和catch< 进行错误处理
是在 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/