我对代码块或“范围”的定义感到困惑.苹果公司的卫士文件说:保护声明的其他部分……
“must transfer control to exit the code block in which the guard statement appear.”
其他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 {....}
创建一个新范围,即{}之间.并且考虑到这个假设,守卫只会逃避这个范围.但事实并非如此.此实例中的Guard不会放置它所放置的函数,而不管它是否隐藏在if子句中.
完全有可能做你想象的事情,它恰好不是那个特定的代码所做的. return始终退出方法,而不是本地范围.要做你想做的事,你可以使用标签,并打破:
func testGuardControlFlow () { let x = 2 let y = 2 func embededFunc () { breakLabel: if y == 2 { guard x == 1 else { print("oops,number is not 1") break breakLabel } 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()
警卫强制您使用控制转移声明退出范围.有4个可供选择:
> return并抛出两个退出函数/方法
> continue可以在循环中使用(while / for / repeat-while)
> break可用于循环(while / for / repeat-while)以退出直接范围.指定要中断的标签将允许您一次退出多个范围(例如,打破嵌套循环结构).使用标签时,break也可用于if范围.
原文地址:https://www.jb51.cc/swift/319956.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。