swift 控制转移语句
2021-04-12 本文已影响0人
bianruifeng
控制转移语句
continue,break,fallthrough,return,带标签的语句
continue
//continue
//continue 语句可以告诉一个循环体立刻停止本次循环,重新开始下次循环,但并不结束整个循环
for i in 1...10 {
//剔除偶数
if i%2 == 0 {
continue
}
print("continue:\(i)")
}
break
//break
//break语句会立刻结束整个控制流的执行,当我们想更早的结束一个switch代码块或者一个循环体时,都可以使用break
for i in 1...10 {
if i == 3 {
break
}
print("循环语句中的break:\(i)")
}
for i in 1...3 {
for j in 1...10 {
if j == 3 {
//只结束当前for循环
break
}
print("双重循环语句中的break:\(j)")
}
}
//switch中break
/*
当在⼀个 switch 代码块中使⽤ break 时,会⽴即中断该 switch 代码块的执⾏,并且跳转到
表⽰ switch 代码块结束的⼤括号( } )后的第⼀⾏代码。
这种特性可以被⽤来匹配或者忽略⼀个或多个分⽀。因为 Swift 的 switch 需要包含所有的
分⽀⽽且不允许有为空的分⽀,有时为了使你的意图更明显,需要特意匹配或者忽略某个
分⽀。那么当你想忽略某个分⽀时,可以在该分⽀内写上 break 语句。当那个分⽀被匹配
到时,分⽀内的 break 语句⽴即结束 switch 代码块。
*/
var t1 = 2
switch t1 {
case 1:
print("匹配到了1")
print("11111111")
case 2:
print("匹配到了2")
break
print("22222222")
case 3:
break
default:
print("啥都没有匹配到")
}
fallthrough 穿透语句
//fallthrough
/*
Swift 中的 switch 不会从上⼀个 case 分⽀落⼊到下⼀个 case 分⽀中。相反,只要第⼀个
匹配到的 case 分⽀完成了它需要执⾏的语句,整个 switch 代码块完成了它的执⾏。相⽐
之下,C 语⾔要求你显⽰的插⼊ break 语句到每个 switch 分⽀的末尾来阻⽌⾃动落⼊到下
⼀个 case 分⽀中。Swift 的这种避免默认落⼊到下⼀个分⽀中的特性意味着它的 switch
功能要⽐ C 语⾔的更加清晰和可预测,可以避免⽆意识地执⾏多个 case 分⽀从⽽引发的
错误。
如果你确实需要 C ⻛格的贯穿的特性,你可以在每个需要该特性的 case 分⽀中使
⽤ fallthrough 关键字。下⾯的例⼦使⽤ fallthrough 来创建⼀个数字的描述语句。
*/
var t2 = 2
switch t2 {
case 1:
print("贯穿:1")
fallthrough
case 2:
print("贯穿:2")
fallthrough
case 3:
print("贯穿:3")
fallthrough
default:
print("贯穿default")
}
return
//return 结束一个函数
func test(name str : String , age n : Int) -> Void {
print("\(str),\(n)")
if n > 20 {
return
}
print("test")
}
test(name: "dzl", age: 25)
带标签的语句
//带标签的语句
/*
在 Swift 中,你可以在循环体和 switch 代码块中嵌套循环体和 switch 代码块来创造复杂的
控制流结构。然⽽,循环体和 switch 代码块两者都可以使⽤ break 语句来提前结束整个⽅
法体。因此,显⽰地指明 break 语句想要终⽌的是哪个循环体或者 switch 代码块,会很有
⽤。类似地,如果你有许多嵌套的循环体,显⽰指明 continue 语句想要影响哪⼀个循环体
也会⾮常有⽤。
为了实现这个⺫的,你可以使⽤标签来标记⼀个循环体或者 switch 代码块,当使
⽤ break 或者 continue 时,带上这个标签,可以控制该标签代表对象的中断或者执⾏。
产⽣⼀个带标签的语句是通过在该语句的关键词的同⼀⾏前⾯放置⼀个标签,并且该标签
后⾯还需带着⼀个冒号。
*/
label1 : for i in 1...10 {
for j in 1...10 {
if j == 3 {
break label1 //此时break结束了两层for循环
}
print("带标签的语句:\(j)")
}
}