Swift用if和switch編寫條件控制語句,用for-in,for,while和do-while編寫迴圈。條件控制語句和迴圈語句中,小括弧是可選的,但花括弧包住這個迴圈體是必須的:
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語句中,條件必須是布爾值,也就是說,if score { ... }這個條件句是錯誤的,不是一個隱式地與0比較的條件。
你可以結合if和let來防止這種值的丟失狀況。這些值意味著可選,這種可選值要麼包含一個具體的值要麼包含一個nil(空)來指示它的值是不存在的。在值的類型後面加上?號來表示它為可選即可:
var optionalString: String? = "Hello"optionalString == nil var optionalName: String? = "John Appleseed"var greeting = "Hello!"if let name = optionalName { greeting = "Hello, \(name)"}
練習:
將 optionalName 賦值為 nil 。會發生什嗎?添加一個 else 條件句在 optionalName 為 nil 時設定一個不同的值試試。
一旦可選值為nil,條件為false時,花括弧裡的代碼塊將被跳過,否則,可選值將是未封裝的並賦值給一個常量,這會讓未封裝的值在代碼塊範圍中可見。
Switch語句
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."}
練習:
移除default語句,看看會報什麼錯?
執行滿足條件的case語句後,程式自動跳出,所以,無需給每個case語句加上break。
For-In語句
使用for-in迴圈在字典中遍曆時,提供一對名字來使用字典中的每一個名值對(如下例的number--numbers):
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
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/
練習:
在上例中,添加一個變數來跟蹤哪一個number是最大的,即最大的值是?
While語句
使用while語句來重複執行一個代碼塊直到條件改變。條件可以置於句末以便代碼至少執行一次:
var n = 2 while n < 100 { n = n * 2 } n var m = 2 do { m = m * 2 } while m < 100 m
For語句
for迴圈中可以使用索引值,利用..(兩個點)或者明確聲明一個初始值,條件句或增量來限制索引的範圍,下面的兩個迴圈意思一樣:
var firstForLoop = 0 for i in 0..3 { firstForLoop += i } firstForLoop var secondForLoop = 0 for var i = 0; i < 3; ++i { secondForLoop += 1 } secondForLoop
使用 ..(兩個點)限制索引的範圍並忽略最高值,而用 ...(三個點) 構造的範圍則包含兩個值。
作者:cnblogs Joe.Huang