控制流

使用ifswitch来进行条件操做,使用for-inforwhilerepeat-while来进行循环。包裹条件和循环变量括号能够省略,可是语句体的大括号是必须的。javascript

let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } print(teamScore)

if语句中,条件必须是一个布尔表达式——这意味着像if score { ... }这样的代码将报错,而不会隐形地与 0 作对比。php

你能够一块儿使用iflet来处理值缺失的状况。这些值可由可选值来表明。一个可选的值是一个具体的值或者是nil以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。java

var optionalString: String? = "Hello" print(optionalString == nil) var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = optionalName { greeting = "Hello, \(name)" }

练习: 把optionalName改为nil,greeting会是什么?添加一个else语句,当optionalNamenil时给greeting赋一个不一样的值。swift

若是变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。若是不是nil,会将值赋给let后面的常量,这样代码块中就可使用这个值了。
另外一种处理可选值的方法是经过使用 ?? 操做符来提供一个默认值。若是可选值缺失的话,可使用默认值来代替。oop

let nickName: String? = nil let fullName: String = "John Appleseed" let informalGreeting = "Hi \(nickName ?? fullName)"

switch支持任意类型的数据以及各类比较操做——不单单是整数以及测试相等。测试

let vegetable = "red pepper" switch vegetable { case "celery": print("Add some raisins and make ants on a log.") case "cucumber", "watercress": print("That would make a good tea sandwich.") case let x where x.hasSuffix("pepper"): print("Is it a spicy \(x)?") default: print("Everything tastes good in soup.") }

练习: 删除default语句,看看会有什么错误?ui

注意let在上述例子的等式中是如何使用的,它将匹配等式的值赋给常量xspa

运行switch中匹配到的子句以后,程序会退出switch语句,并不会继续向下运行,因此不须要在每一个子句结尾写breakrest

你可使用for-in来遍历字典,须要两个变量来表示每一个键值对。字典是一个无序的集合,因此他们的键和值以任意顺序迭代结束。code

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 } } } print(largest)

练习: 添加另外一个变量来记录如今和以前最大数字的类型。

使用while来重复运行一段代码直到不知足条件。循环条件也能够在结尾,保证能至少循环一次。

var n = 2 while n < 100 { n = n * 2 } print(n) var m = 2 repeat { m = m * 2 } while m < 100 print(m)

你能够在循环中使用..<来表示范围,也可使用传统的写法,二者是等价的:

var firstForLoop = 0 for i in 0..<4 { firstForLoop += i } print(firstForLoop) var secondForLoop = 0 for var i = 0; i < 4; ++i { secondForLoop += i } print(secondForLoop)

使用..<建立的范围不包含上界,若是想包含的话须要使用...

相关文章
相关标签/搜索