import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
控制转移语句可以改变代码的执行顺序,通过它可以实现代码的跳转。Swift 有四种控制转移语句。
continue
break
fallthrough
return
*/
/**
continue :让循环体立刻停止本次循环,重新开始下一次循环。
就好像在说 “本次循环迭代可以完了”,但是并不会离开整个循环体。
在一个 for 条件递增(for-condition-increment)循环体中,在调用 continue 语句后,迭代增量仍然会被计算求值。
循环体继续像往常一样工作,仅仅只是循环体中的执行代码会被跳过。
只要匹配到元音字母或者空格字符,就调用 continue 语句,使本次循环结束,然后新开始下次循环。
*/
let string = "Dispose of any resources that can be recreated"
var output = ""
for cha in string.characters {
switch cha {
case "a","e","i","o","u":
continue;
default:
output+=String(cha)
}
}
print(output)
/**
break :立刻结束(跳出)整个控制流的执行。
如果要更早的结束一个 switch 代码块或者一个循环体,使用break语句
break 用在循环体中时,会立刻结束该循环体的执行,然后跳转到循环体结束(大括号(}) )后的第一行代码。
循环迭代就此结束
Swift 中的switch不会从上一个 case 分支落入到下一个 case 分支中。
相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个switch代码块完成了它的执行。
相比之下,C 语言要求你显示的插入break语句到每个switch分支的末尾来阻止自动落入到下一个 case 分支中。
Swift 的这种避免默认落入到下一个分支中的特性意味着它的switch 功能要比 C 语言的更加清晰和可预测,可以避免无意识地执行多个 case 分支从而引发的错误。
如果你确实需要 C 风格的贯穿(fallthrough)的特性,你可以在每个需要该特性的 case 分支中使用fallthrough关键字。
使用fallthrough只能保证case的下一个分支可以被贯穿
fallthrough关键字不会检查它下一个将会落入执行的 case 中的匹配条件。
fallthrough简单地使代码执行继续连接到下一个 case 中的执行代码,这和 C 语言标准中的switch语句特性是一样的
*/
let a = 3
var b = 0
switch a {
case 1:
print("case == 1 ")
b += 1
fallthrough
case 3:
print("case == 3 ")
b += 3
fallthrough
case 5:
print("case == 5 ")
b += 5
fallthrough
default:
print("case == default ")
b += 100
}
print("b == \(b)")
//MARK: 标签声明
/**
在 Swift 中,你可以在循环体和switch代码块中嵌套循环体和switch代码块来创造复杂的控制流结构。
然而,循环体和switch代码块两者都可以使用break语句来提前结束整个方法体。
因此,显示地指明break语句想要终止的是哪个循环体或者switch代码块,会很有用。
类似地,如果你有许多嵌套的循环体,显示指明continue语句想要影响哪一个循环体也会非常有用。
为了实现这个目的,你可以使用标签来标记一个循环体或者switch代码块,当使用break或者continue时,带上这个标签,可以控制该标签代表对象的中断或者执行。
产生一个带标签的语句是通过在该语句的关键词的同一行前面放置一个标签,并且该标签后面还需带着一个冒号。
*/
var i = 0
forloop1 : while i < 10 {
++i
forloop2 : for i in i...11 {
print("i ==\(i)")
switch i {
case 1:
print("1")
case 2:
print("2")
case 3:
print("3")
default:
print("default \(i)")
break forloop2
}
}
}
}
}