调用使用Swift关键字“抛出”“异常”创建的错误是否正确?

时间:2017-01-04 12:13:26

标签: swift error-handling

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

  

Swift中的错误处理类似于其他的异常处理   语言,使用try,catch和throw关键字。不像   许多语言的异常处理 - 包括Objective-C-error   Swift中的处理不涉及展开调用堆栈,这是一个过程   这可能是计算上昂贵的。

所以只是因为调用堆栈丢失了它不能被称为异常? (是否有一个科学定义的错误处理机制必须提供的功能被称为异常?)

1 个答案:

答案 0 :(得分:1)

我认为为什么它被称为错误处理与调用堆栈无关。基于两个词的定义,调用栈是无关紧要的事实证实了这一点。我相信你在问题中包含的引用的目的仅仅是为了区分Swift中的错误处理和其他语言中的异常处理,而忽略了名称的差异。

为了识别非快速语言的区别,常见的描述是不处理异常是错误的。因此,错误和异常是两个独特的实体。

现在在Swift中,他们似乎已经试图完全摆脱“#34; exception"赞成只使用术语错误。因此可以处理错误,如果没有,程序崩溃。这很可能是因为调用实际崩溃并不重要,更重要的是导致它崩溃的原因,在这种情况下是错误"。

就iOS世界的使用而言,我对此没什么经验,但我认为即使把它称为“#34;异常处理"在技​​术上并不正确,大多数Swift程序员都会知道你在说什么,可能不会纠正你(或者甚至想纠正你)。

总的来说,我认为这主要是语义问题,而不是什么构成错误"什么构成了"例外"。

修改

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

我的观点是,在不同的编码语言中,术语"错误" (在斯威夫特)和"例外" (例如在Java中)基本相同,只是名称不同。

例如,我可以尝试处理名为" ArrayError"的错误。 (我知道愚蠢的名字,它仅仅是一个例子)在Java中我可能试图捕获IndexOutOfBoundsException。这两个对象都被抛出并被捕获,因此我在两者之间进行了比较,突出了Swift与其他语言中命名约定的差异。

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