处理程序员在Swift中的错误导致的条件

时间:2016-03-14 14:13:49

标签: swift exception-handling

Swift提供了异常处理功能,这些功能在错误超出程序员控制(丢失文件,断开连接等)的情况下非常有用。虽然我可以使用相同的机制来报告由程序员错误(索引超出范围,范围错误等)引起的情况,但我想知道这是否是使用异常的预期方式。

在Objective-C代码中,处理这些情况的常用方法是通过断言。另一方面,在Objective-C中有些不鼓励使用异常,因此这里可能没有一对一的替换。

同样,在Java中有检查和未检查的异常,打算对程序员的错误使用未经检查的异常。

我的理解是Swift中的异常之间没有检查/未检查的区别。我想知道使用异常或断言是否是报告程序员在Swift中的错误的正确方法,或者我是否应该使用其他机制?

1 个答案:

答案 0 :(得分:1)

尽管它的语法与Java的异常处理类似,但Swift的do/catch用于处理错误。换句话说,Swift不支持异常处理。

有关Java的异常处理和Swift错误处理之间的一些区别,请参阅this question。另外一个要添加答案的项目是Swift的错误处理并不能提供任何堆栈展开。

do/catch用于处理可恢复的错误; assertprecondition用于处理无法恢复的程序员错误。

See here有关何时使用assert vs precondition的讨论和Dave Abrahams引用。