使用关键字throw
,throws
,do
,try
和catch
进行错误处理是在Swift的第2版中引入的。在the relevant chapter of the official Swift documentation中,未使用 exception 这个词,但声明如下:
Swift中的错误处理类似于其他的异常处理 语言,使用try,catch和throw关键字。不像 许多语言的异常处理 - 包括Objective-C-error Swift中的处理不涉及展开调用堆栈,这是一个过程 这可能是计算上昂贵的。
所以只是因为调用堆栈丢失了它不能被称为异常? (是否有一个科学定义的错误处理机制必须提供的功能被称为异常?)
答案 0 :(得分:1)
我认为为什么它被称为错误处理与调用堆栈无关。基于两个词的定义,调用栈是无关紧要的事实证实了这一点。我相信你在问题中包含的引用的目的仅仅是为了区分Swift中的错误处理和其他语言中的异常处理,而忽略了名称的差异。
为了识别非快速语言的区别,常见的描述是不处理异常是错误的。因此,错误和异常是两个独特的实体。
现在在Swift中,他们似乎已经试图完全摆脱“#34; exception"赞成只使用术语错误。因此可以处理错误,如果没有,程序崩溃。这很可能是因为调用实际崩溃并不重要,更重要的是导致它崩溃的原因,在这种情况下是错误"。
就iOS世界的使用而言,我对此没什么经验,但我认为即使把它称为“#34;异常处理"在技术上并不正确,大多数Swift程序员都会知道你在说什么,可能不会纠正你(或者甚至想纠正你)。
总的来说,我认为这主要是语义问题,而不是什么构成错误"什么构成了"例外"。
修改强>
我应该澄清,我的意思是iOS / Swift 中的错误和异常之间的区别不仅仅是语义。例外是非法事件发生时抛出的异常,并且可以创建错误以防止显示这些消息/程序崩溃。在这方面,他们是完全不同的东西。
我的观点是,在不同的编码语言中,术语"错误" (在斯威夫特)和"例外" (例如在Java中)基本相同,只是名称不同。
例如,我可以尝试处理名为" ArrayError"的错误。 (我知道愚蠢的名字,它仅仅是一个例子)在Java中我可能试图捕获IndexOutOfBoundsException。这两个对象都被抛出并被捕获,因此我在两者之间进行了比较,突出了Swift与其他语言中命名约定的差异。
但不,即使在Swift中,错误和异常在技术上也不是一回事。