使用if
和switch
来进行条件操做,使用for-in
、for
、while
和repeat-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
你能够一块儿使用if
和let
来处理值缺失的状况。这些值可由可选值来表明。一个可选的值是一个具体的值或者是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
语句,当optionalName
是nil
时给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
在上述例子的等式中是如何使用的,它将匹配等式的值赋给常量x
。spa
运行switch
中匹配到的子句以后,程序会退出switch
语句,并不会继续向下运行,因此不须要在每一个子句结尾写break
。rest
你可使用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)
使用..<
建立的范围不包含上界,若是想包含的话须要使用...
。