for循环
1.for-in循环对一个集合里面的每个元素执行一系列语句。
2.for循环,用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。
while循环
while循环运行一些列语句直到条件变成false。这类循环适合使用在第一次迭代前迭代次数未知的情况下。
1.while循环,每次在循环开始时计算条件是否符合;
while循环从计算单一条件开始。如果条件为true,会重复运行一系列语句,直到条件变为false。
while循环格式:
while condition {
statements
}
2.repeat-while循环,它和while的区别是在判断循环条件之前,先执行一次循环的代码块,然后在判断是否满足条件。
repeat-while循环的格式:
repeat {
statements
} while conditions
if 条件
1.if语句最简单的形式就是只包含一个条件,当且仅当该条件为rue时,才执行相关代码:
var tmpValue = 30
if tmpValue <= 40 {
print("the value small than 40")
}
2.if语句允许二选一,也就是当条件为false时,执行else语句:
var tmpValue = 30
if tmpValue <= 40 {
print("the value small than 40")
}else{
print("the value large than 40")
}
3.我们也可以使用多个if 语句。
var scole = 70
if scole < 60 {
print("不及格")
}else if(scole >= 80){
print("优秀")
}else{
print("需要努力")
}
Switch
switch语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch语句会执行对应的代码。当有可能的情况较多时,通常用switch语句替换if语句。
1.switch语句最简单的形式就是把某个值与一个或若干个形同类型的值作比较。switch语句必须时完备的。这就是说,每一个可能的值都必须至少有一个case分支与之对应。在某些不能涵盖所有值的情况下,我们可以使用默认(default)分支满足该需求,这个默认分支必须在switch语句的最后面。
var str = "hello world"
switch str {
case "hello":
print("匹配分支 1")
case "hi","hell","hello world":
print("匹配分支 2")
default:
print("无法匹配")
}
2.switch不存在隐式的贯穿
与c语言和OC中的switch语言不同,在swift中,当匹配的case分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个case分支。这就是说,不需要在case分支中显示的使用break语句了。这使得switch语句更安全、更易用,也避免了因为忘记写break语句而产生的错误。
3.每一个case分支都必须包含至少一条语句。
4.一个case也可以包含多个模式,用逗号把它们分开(如果太长了也可以分行写)
var str = "hello world"
switch str {
case "hello":
print("匹配分支 1")
case "hi",
"hell",
"hello world":
print("匹配分支 2")
default:
print("无法匹配")
}
5.区间匹配
case分支的模式也可以是一个值的区间。
var score = 90;
switch score {
case 0..<60:
print("不及格")
case 60..<80:
print("继续努力")
case 80...100 :
print("优秀")
default:
print("出错了")
}
6.元组匹配
我们可以使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有可能的值。
let point = (100,20)
switch point {
case (0,0):
print("case 1")
case (_,0):
print("case 2")
case (0,_):
print("case 3")
case (100...320,0..<60):
print("case 4")
case (10,10):
print("case 5")
default:
print("default")
}
7.值绑定
case分支的模式允许将匹配的值绑定到一个临时的变量或常量。这些常量或变量在该case分支里就可以被引用了----这种行为被称为值绑定。
let point = (100,20)
switch point {
case (0,let y) :
print("在y轴上,y = \(y)")
case (let x,0):
print("在x轴上,x=\(x)")
case let (x,y):
print("x = \(x) and y = \(y)")
}
8.where
case 分支的模式可以使用where语句来判断额外的条件。
let score = (80,90,80)
switch score {
case let (y,s,w) where y+s+w > 240:
print("一本")
case let (y,s,w) where y+s+w > 210:
print("二本")
default:
print("复读")
}
控制转移语句
- continue
- break
- fallthrough
- return
- throw
continue
continue语句告诉一个循环体立刻体制本次循环,重新开始下一次循环迭代。
break
break语句会立刻结束整个控制流的执行。当我们像更早的结束一个switch或者一个循环体是,我们可以使用break语句。
1.当在一个循环中使用break时,会立即中断循环的执行。
2.当在一个switch代码中使用break时,会立即中断该switch代码块的执行,并跳转到表示switch代码块结束的大括号后面。
贯穿
如果我们确实需要c风格的贯穿的特性,我们可以在每个需要该特性的case分支中使用fallthrough关键字。
let score = 5000000
var arr:[String] = []
switch score {
case let x where x >= 1000000:
arr.append("汽车")
fallthrough
case 10000 ..< 100000:
arr.append("电瓶车")
fallthrough
case 1000 ..< 10000:
arr.append("剃须刀")
fallthrough
case 100 ..< 1000:
arr.append("杯子")
default:
print("积分太少")
}
note:错误的使用方式
let score = 5000000
var arr:[String] = []
switch score {
case let x where x >= 1000000:
arr.append("汽车")
fallthrough
case let x where x >= 100000:
arr.append("电瓶车")
fallthrough
case let x where x >= 10000:
arr.append("剃须刀")
fallthrough
case let x where x >= 1000:
arr.append("杯子")
default:
print("积分太少")
}
错误分析:原因是因为fallthrough不会检查where匹配条件,这样便会导致var或者let声明的变量常量无法得到值,所以swift禁止fallthrough到这样的case中。
fallthrough 关键字不会检查它下一个将会引入执行的case中的匹配条件。fallthrough简单地使代码执行继续连接到下一个case中的执行代码,这和c语言标准中的switch语句特性使一样的。
带标签的语句
1.带标签的语句用于显示的指明break和continue语句想要终止的是那个循环体或者switch代码块。
2.产生一个带标签的语句时通过该语句的关键词的同一行前面放置一个标签,并且该标签后面还需要带着一个冒号。下面是一个while循环体的语法,同样的规则适用于所有的循环体和switch代码块。
labelName : while condition {
statements
}
loop1: for i in 0 ..< 100 {
loop2: for j in 0 ..< 20 {
var x = i * j
if x > 100 {
break loop1
}
print("\(x) = \(i) * \(j)")
}
}
提前推出
1.像if语句一样,guard的执行取决于一个表达式的布尔值。我们可以使用guard语句来要求条件必须为真时,以执行guard语句后的代码。不同于if语句,一个guard语句总是有一个else分支,如果条件不为真则执行else分支中的代码。
2.如果guard语句的条件满足,则在保护语句的封闭大括号结束后继续执行代码。任何使用了可选绑定作为条件的部分并被分配了值的变量或常量对于剩下的保护语句出现的代码段是可用的。
3.如果条件不满足,在else分支上的代码就会被执行。这个分支必须转移控制以退出guard语句出现的代码段。它可用使用控制语句如return,break,continue或者throw等。
func test() -> Void {
let value = Int("11")
guard let tmpValue = value else{
return
}
print("the tmpValue is \(tmpValue)")
}
test()
检测API可用性
1.swift有检查API可用性的内置支持,这可以确保我们不会不小心地使用对于当前部署目标不可用的API。
if #available(iOS 9, *) {
print("API适配ios9以上")
}else{
print("不能支持ios9系统")
}