如何判断哪个block guard退出了?

How to tell which block guard exits out of?

guard 条件失败时,它们退出闭包。但是,让我感到困惑的是什么被认为是警卫退出的障碍?

例如,如果我有以下内容:

func doThing() {
  while ... {
    for ... {
      if ... {
        guard ... else { return }
      }
    }
  }
}

guard 是只退出 ifforwhile 还是整个 func

实际规则是什么,因为我读过 blockclosure 术语在定义 guard 退出时可以互换使用,但每个术语的含义不同。

return 语句用于从最近的闭包(在您的情况下为函数)退出并返回结果值(默认为 Void),无论您的循环有多深或 if状况。可能你混淆了 returnbreak.

但是,您也可以在 guard 语句的 else 子句中使用 breakcontinuethrow 语句。例如,如果您使用 break 语句,则结束最近循环或 switch 语句的执行,或者,如果您 mark cycle/if/switch by label 并使用 break 后跟该标签,则退出标记语句。