Swift 基礎之控制流

Swift 提供了類似 C 語言的流程控制結構,包括可以多次執行任務的 for 和 while 循環,基於特定條件選擇執行不同代碼分支的 if 和 switch 語句,還有控制流程跳轉到其他代碼的 break 和 continue 語句。

除了 C 裏面傳統的 for 條件遞增循環,Swift 還增加了 for-in 循環,用來更簡單地遍歷數 組(array),字典(dictionary),範圍(range),字符串(string)和其他序列類型。

Swift 的 switch 語句比 C 語言中更加強大。在 C 語言中,如果某個 case 不小心漏寫了 break,這個 case 就會“掉入”下一個 case,Swift 無需寫 break,所以不會發生這種“掉入”的情況。Case 還可以匹配更多的類型模式,包括範圍(range)匹配,元組(tuple)和特定類型的描述。switch case 語句中匹配的值可以是由 case 體內部臨時的常量或者變量決 定,也可以由 where 分句描述更復雜的匹配條件。

1. if 語句

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 { … }這樣的代碼是錯誤的。

2. 使用 if 和 let 來處理值缺失

你可以一起使用 if 和 let 來處理值缺失的情況。有些變量的值是可選的。一個可選的值可能 是一個具體的值或者是 nil,表示值缺失。在類型後面加一個問號來標記這個變量的值是可選的。

var optionalString: String? = "Hello"
optionalString == nil

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

練習:把 optionalName 改成 nil,greeting 會是什麼?添加一個 else 語句,當 optionalName 是 nil 時給 greeting 賦一個不同的值。

如果變量的可選值是 nil,條件會判斷爲 false,大括號中的代碼會被跳過。如果不是 nil,會 將值賦給 let 後面的常量,這樣代碼塊中就可以使用這個值了。

3. switch語句

switch 支持任意類型的數據以及各種比較操作——不僅僅是整數以及測試相等。

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

練習:刪除 default 語句,看看會有什麼錯誤?

運行 switch 中匹配到的子句之後,程序會退出 switch 語句,並不會繼續向下運行,所以不 需要在每個子句結尾寫 break。

4. for-in 語句

可以使用 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 {
    print(kind)
    for number in numbers {
        largest = number
        print(largest)
    }
}

練習 :添加另一個變量來記錄哪種類型的數字是最大的。

你可以在循環中使用…來表示範圍,也可以使用傳統的寫法,兩者是等價的:

// for-in 循環範圍
var firstForLoop = 0
for i in 0...3 {
    firstForLoop += i
}
print(firstForLoop)

5. while 語句

使用 while 來重複運行一段代碼直到不滿足條件。循環條件可以在開頭也可以在結尾。

var n = 2
var number = 0

while n < 100 {
    number += 1
    n = n * 2
}
print(n,number)

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

關注公衆號 [Swift 社區] 獲取文章示例代碼,添加微信:[FBY-fan] 拉你進羣交流。

發佈了114 篇原創文章 · 獲贊 21 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章