
Swift 語言入門(三)控制流程
控制流程
ifif 在程式開發,條件判斷很常用,用來判斷 是 或 否 兩種狀態。 例如字串變數,是否為空字串,數字是否大於零。 if 語法範例: if z > b { // 做些利大於弊的事 } if 條件判斷需加上另外的狀態處理,則用 else,例如: if str == "" { // 這裡處理 空字串流程 } else { // 這裡處理 非空字串 } if、else if、else 綜合範例: if (index > 0) { // if 條件語句可括號 "index 大於 0" } else if index == 0 { // if 條件語句可不括號 "index 等於 0" } else { "index is 為負數" } for 與 for-infor 迴圈 是用來訪問連續的資料,例如你有一筆名冊的資料,想要把每個名字都印出來,就會需要它! for 語法格式: for 初始值; 條件描述; 遞增或遞減值 { // 條件成立 則進入此段程式 } 範例: for var i = 0; i < 3; i++ { println("var i is \(i)") } log 輸出 => var i is 0 var i is 1 var i is 2
for char in "Swift" { println(char) } log 輸出 => S w i f t for-in 陣列
let languages = ["Swift", "Objective-C", "Ruby", "Java"] for lang in languages { println(lang) } log 輸出 => Swift Objective-C Ruby Java for-in Range也可以使用 Range 形態,例如: for i in 1..<5 { println("range in \(i)") } log 輸出 => range in 1 range in 2 range in 3 range in 4 for-in 字典當然強大的 for-in 語句,也支援常用的字典型態,搭配 Tuples(元組,多個元素的組合),讓尋訪字典內的 key, value 變得相當直覺!範例如下: let nums = ["one": 1, "two": 2, "three": 3] for (str, num) in nums { println("\(str) is \(num)") } => one is 1 two is 2 three is 3 while 與 do whilewhile 迴圈與 for 迴圈類似,但 while 迴圈會重複執行他的程式區塊,直到條件為 否。 while 語法格式: // while while 條件 { // 執行程式區塊 } // do while do { // 執行程式區塊 } while (條件) while舉個例子,假設我們有個變數 decrease 帶著數值 3,在 while 迴圈內一直遞減,while 條件 大於 0,所以 decrease 在大於 0 之前,while 迴圈 都會一直被執行。 var decrease = 3 while decrease > 0 { println("decrease \(decrease)") --decrease } => decrease 3 decrease 2 decrease 1 do while迴圈語句用於,不論如何,迴圈先執行再說,後面 while 條件在來決定要不要繼續執行迴圈。範例如下: var increase = 0 do { println("increase \(increase)") ++increase } while (increase < 3) => increase 0 increase 1 increase 2 Switch前面介紹過 if 判斷式,switch 也是判斷式,不過是對於數值的連續判斷,當我們用了很多的 if 或 else if 判斷式時,或許是我們考慮該使用 switch 的時機。 switch 語法格式: switch 變數 { case 比較的數值: // 數值一樣時,執行的區塊 default: "其他數值" } Switch 數值判斷let count = 3 switch count { case 1: println("one") case 2: println("two") case 3: println("three") default: println("other value") } => three Switch 字串switch 語句也支援字串。 var name = "Apple" switch name { case "Apple": println("Hi Apple!") case "iPhone": println("Hi iPhone!") default: println("請問你叫什麼名字?") } => Hi Apple! Switch 多數值 case 判斷let number = 8 switch number { case 1, 3, 5, 7, 9: println("奇數") case 2, 4, 6, 8, 10: println("偶數") default: println("其他數值") } => 偶數 Switch 使用 Tuplelet point = (1,2) switch point { case (0,0): println("原始起點") case (_, 0): println("x=任意值, y=0") case (0, _): println("x=0, y=任意值") case (1,2): println("坐標 1, 2") default: println("其他坐標") } => 坐標 1, 2 switch 的 where 條件與 數值綁定 (Value Bindings)Swift 語言的強大 switch 語句還可針對條件作判斷,例如下方範例 let anotherPoint = (5,5) switch anotherPoint { case let (x,y) where x==y: println("正方形") default: println("矩形") } => 正方形 Switch in Rangeswitch 當然也支援 Range 型別。 var num = 9 switch num { case 0...9: println("個位") case 10...99: println("十位") case 100...999: println("百位") default: println("其他") } => 個位 Switch Enum在此我們可以看到 Swift語言,對於 Objective-C 的 Enums 修正了冗長的變數名稱,例如改以 enum CompassPoint { case North case South case East case West } var direction = CompassPoint.South switch direction { case .North: println("北邊") case .East: println("東邊") case .West: println("西邊") case .South: println("南邊") } => 南邊 標簽語句整段的執行結果,尋訪 names 陣列,並且尋訪每個元素的字元,遇到 小寫 a 字元時,跳 (break) 下個元素。 let names = ["Anna", "Alex", "Brian", "Jack"] var result = "" nameLoop: for name in names { charLoop: for char in name { theSwitch: switch char { case "a": // 只要遇到 小寫 a,就結束 charLoop break charLoop default: result += char } } } println(result) => AnnAlexBriJ 控制轉移語句 (control transfer statements)控制轉移語句 (control transfer statements)能讓我們撰寫控制流程時,自由的決定程式要往哪邊跑,Swift 語言有四種控制轉移語句。
我們往下來看範例: continue在 for i in 1...10 { if i > 5 { println("continue \(i)") continue } println(i) } => 1 2 3 4 5 continue 6 continue 7 continue 8 continue 9 continue 10 breakbreak 脫離迴圈,在 for i in 1...10 { if i > 5 { println("break \(i)") break } println(i) } => 1 2 3 4 5 break 6 fallthrough因為 integerToDescribe 是 Int,所以它一定是數字,但未必是質數,如果是質數,則 fallthrough 到 default,因為質數也是數字。 let integerToDescribe = 5 var integerDescription = "\(integerToDescribe) 是" switch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: integerDescription += " 質數, 也是" fallthrough default: integerDescription += " 數字" } println(integerDescription) => 5 是 質數, 也是 數字 return函式回傳的一些用法,直接回傳數值或變數,亦可回傳 Tuples。 func sayHelloWorld() -> String { return "Hello World" } // return with Tuple func http404Error() -> (Int, String) { return (404, "Not Found") } |