我对代码块或'范围'的定义感到困惑。苹果公司的警告说:这是另一个警卫声明块...如果Swift'guard'语句必须退出范围,范围的定义是什么?
“必须传输控制以退出出现警戒语句的代码块”。
其他online sources表示警戒声明必须存在它所在的'范围'。
因此,采取下面的示例代码:
func testGuardControlFlow() {
let x = 2
let y = 2
func embededFunc() {
if y == 2 {
guard x == 1 else {
print("oops, number is not 1")
return
}
print ("from in embededFunc")
}
print ("I still want this to print even if x != 1")
}
embededFunc()
print("Great, return still allows this to be printed.")
}
testGuardControlFlow()
根据我目前的 '范围' 的理解,代码
if y == 2 {....}
创建一个新的范围,即在{}。考虑到这个假设,后卫只会逃避这个范围。但事实并非如此。在这个例子中,守卫从其被放置的功能中逃脱出来,而不管它是否被埋在if子句中。
我完全误解'范围'的含义吗?范围意味着包含在方法中的代码吗?如果是这样,if语句中存在的“空间”的正确术语是什么?
要求是else子句离开当前范围。 'return'通过留下当然会留下当前范围的整个函数来满足要求。没有必要在else子句中使用'return'。其他的东西会起作用,比如“继续”。 – vacawama