Swift中do-catch块后代码未执行的原因排查
为什么抛出未被catch块匹配的错误时,do-catch后的代码不执行?
这是Swift错误处理的核心规则导致的:如果do块内抛出的错误没有被任何catch子句匹配捕获,这个错误会自动向上传播到当前作用域之外,直接终止当前执行流。
回到你的代码场景:
当exampleTask抛出.exampleIgnoredError时,你的catch子句有过滤条件error as? ExampleError != .exampleIgnoredError——这个条件对.exampleIgnoredError显然不成立,所以该catch块不会处理这个错误。而你又没有定义其他catch子句兜底,于是这个未被捕获的错误会直接抛出到Task的顶层,导致整个Task的执行被中断。这就意味着do-catch结构之后的print("do-catch completed")和processing = false代码根本没机会运行。
对比两种正常执行的情况:
- 如果
exampleTask不抛出错误:do块会完整执行,之后直接走到后续代码; - 如果抛出的是
.exampleError:这个错误会被catch块的条件匹配到,catch块执行后,后续代码依然会正常运行。
简单说,你当前的catch块只负责捕获非忽略的错误,但完全没处理被忽略的错误——而Swift不允许未被捕获的错误留在当前作用域里,一旦出现这种情况,就会直接终止执行流,跳过后续所有代码。
内容的提问来源于stack exchange,提问作者obevan
相关产品推荐
相关产品推荐

