You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:29:57