本节书摘来自异步社区《Swift开发实战》一书中的第2章,第2.3节流程控制,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 流程控制
在本章前面的实例2-1程序中,下面这些都是实现流程控制工作的实现代码。
switch("abc")
{
case "123":
println("123");
case "456","abc":
println("123 abc ");
default:
println("没有找到合适的匹配");
}
var i:Int = 0;
while( i<10)
{
i++;
println(i);
}
do
{
i--;
println(i);
}while(i>0);
for index in 1...5
{
println("index=\(index)");
}
在Swift语言中,使用关键字if和switch来进行条件判断操作,使用for-in、for、while和do-while来进行循环操作。在Swift程序中,可以省略包含条件和循环变量括号,但是必须保留语句体中的大括号。例如,下面所示的演示代码。
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
teamScore
在if语句中,条件必须是一个布尔表达式——这意味着像if score { ... }这样的代码将报错,而不会隐式地与 0 做对比。
在Swift语言中,有些变量的值是可选的,一个可选的值可能是一个具体的值或者是nil(此时表示值缺失)。在Swift程序中,可以联合使用if和let来处理值缺失的情况,具体方法是在类型后面加一个问号“?”来标记这个变量的值是可选的。参见如下所示的演示代码。
var optionalString: String? = "Hello"
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
在Swift语言中,如果变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。如果不是nil,则会将值赋给let后面的常量,这样在代码块中就可以使用这个值了。
在Swift语言中,关键字switch可以支持任意类型的数据以及各种比较操作,而不仅仅是整数以及测试相等。例如,如下所示的演示代码。
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
在Swift语言中,运行switch中匹配到的子句之后,程序会退出switch语句,不会继续向下运行,所以不需要在每个子句结尾写break。
在Swift语言中,可以使用for-in来遍历字典,需要两个变量来表示每个键值对。参见如下所示的演示代码。
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
在Swift语言中,可以使用while来重复运行一段代码直到不满足条件为止,循环条件可以在开头也可以在结尾。例如,如下所示的演示代码。
var n = 2
while n < 100 {
n = n * 2
}
n
var m = 2
do {
m = m * 2
} while m < 100
m
在Swift语言中,可以在循环中使用“..”字符来表示范围,也可以使用传统的写法来实现,这两种方式是完全等价的。例如,如下所示的演示代码。
var firstForLoop = 0
for i in 0..3 {
firstForLoop += i
}
firstForLoop
var secondForLoop = 0
for var i = 0; i < 3; ++i {
secondForLoop += 1
}
secondForLoop