如何判断哪个block guard退出了?
How to tell which block guard exits out of?
当guard
条件失败时,它们退出闭包。但是,让我感到困惑的是什么被认为是警卫退出的障碍?
例如,如果我有以下内容:
func doThing() {
while ... {
for ... {
if ... {
guard ... else { return }
}
}
}
}
guard
是只退出 if
、for
、while
还是整个 func
?
实际规则是什么,因为我读过 block
和 closure
术语在定义 guard
退出时可以互换使用,但每个术语的含义不同。
return
语句用于从最近的闭包(在您的情况下为函数)退出并返回结果值(默认为 Void
),无论您的循环有多深或 if
状况。可能你混淆了 return
和 break
.
但是,您也可以在 guard
语句的 else
子句中使用 break
、continue
或 throw
语句。例如,如果您使用 break
语句,则结束最近循环或 switch
语句的执行,或者,如果您 mark cycle/if
/switch
by label 并使用 break
后跟该标签,则退出标记语句。
当guard
条件失败时,它们退出闭包。但是,让我感到困惑的是什么被认为是警卫退出的障碍?
例如,如果我有以下内容:
func doThing() {
while ... {
for ... {
if ... {
guard ... else { return }
}
}
}
}
guard
是只退出 if
、for
、while
还是整个 func
?
实际规则是什么,因为我读过 block
和 closure
术语在定义 guard
退出时可以互换使用,但每个术语的含义不同。
return
语句用于从最近的闭包(在您的情况下为函数)退出并返回结果值(默认为 Void
),无论您的循环有多深或 if
状况。可能你混淆了 return
和 break
.
但是,您也可以在 guard
语句的 else
子句中使用 break
、continue
或 throw
语句。例如,如果您使用 break
语句,则结束最近循环或 switch
语句的执行,或者,如果您 mark cycle/if
/switch
by label 并使用 break
后跟该标签,则退出标记语句。