使用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)
使用..<
建立的範圍不包含上界,若是想包含的話須要使用...
。