Swift提供了异常处理功能,这些功能在错误超出程序员控制(丢失文件,断开连接等)的情况下非常有用。虽然我可以使用相同的机制来报告由程序员错误(索引超出范围,范围错误等)引起的情况,但我想知道这是否是使用异常的预期方式。
在Objective-C代码中,处理这些情况的常用方法是通过断言。另一方面,在Objective-C中有些不鼓励使用异常,因此这里可能没有一对一的替换。
同样,在Java中有检查和未检查的异常,打算对程序员的错误使用未经检查的异常。
我的理解是Swift中的异常之间没有检查/未检查的区别。我想知道使用异常或断言是否是报告程序员在Swift中的错误的正确方法,或者我是否应该使用其他机制?
答案 0 :(得分:1)
尽管它的语法与Java的异常处理类似,但Swift的do/catch
用于处理错误。换句话说,Swift不支持异常处理。
有关Java的异常处理和Swift错误处理之间的一些区别,请参阅this question。另外一个要添加答案的项目是Swift的错误处理并不能提供任何堆栈展开。
do/catch
用于处理可恢复的错误; assert
和precondition
用于处理无法恢复的程序员错误。
See here有关何时使用assert
vs precondition
的讨论和Dave Abrahams引用。