Swift之旅(二)控制流程

來源:互聯網
上載者:User

標籤:swift

要處理條件邏輯,使用 if 和 switch ,要處理迴圈邏輯,使用 for-in, for, while, 和 do-while 。包著條件或者迴圈的括弧可加可不加。處理邏輯體的花括弧是必須加的。

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

注意

以上代碼,temaScore自己佔了一行代碼。這是在playground裡看變數值的簡單方法。

在if語句裡,條件必須是一個Boolean運算式——意思是像 if score { … } 這種寫法是錯的,因為不能隱式地轉換為0值。

你可以把 if 和 let 一起使用來處理可能不明確的值。這些值表示為可選值。可選值要麼包含一個值,要麼包含 nil ,表明這個值是不明確的。在值的類型後加上問號 (?) 來標記這個值是可選的。

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

試一試

將 optionalName 改為 nil。 greeting 是什麼值? 再加一個 else
語句,如果 optionalName 是 nil ,將 greeting 設定一個不同的值。

如果可選值是 nil ,條件就為false,花括弧裡的代碼就會被跳過。否則,可選值被開啟(unwrapped,博主註:這裡的unwrapped實在不知道該如何翻譯更好,這個詞的原意為開啟、展開,直接翻譯過來感覺怪怪的,暫時稱之為開啟吧,貌似有的文章翻譯為解析)並賦給 let 後面的常量,這個常量就可以使的開啟值用在代碼塊裡了。

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那一部分去掉。看看會有什麼錯誤?

注意看一下 let 是怎麼用來將匹配模式部分的值賦給常量的。

匹配switch case 的代碼執行完以後,程式從switch語句跳出。不會執行下一個case,所以沒有必要在每個case結束部分代碼處顯示的跳出switch。

通過提供一組用於各個索引值對的名稱,用 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 = 0for (kind, numbers) in interestingNumbers {    for number in numbers {        if number > largest {            largest = number        }    }}println(largest)

試一試

增加一個變數來追蹤哪種數是最大的,還有這個最大的數是多少

用 while 來重複執行一段代碼直到條件改變。迴圈的條件也可以放到最後,以保證迴圈至少執行一次。

var n = 2while n < 100 {    n = n * 2}println(n)var m = 2do {    m = m * 2} while m < 100println(m)

你可以在迴圈裡維持一個索引——要麼使用 ..< 建立一套索引或者要麼寫一個顯示的初始化、條件和遞進。這兩種迴圈是一樣的:

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

用 ..< 建立的索引忽略最大值,用 … 建立的索引包含最大值。

Swift之旅(二)控制流程

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.